如何将Python字典中的所有元素添加到数据库?

3

我正在尝试将字典的元素添加到数据库中。我对使用数据库完全不熟悉,想知道我是否做得正确?如果是这样,我该怎么做?然后如何打印出数据库中的所有元素呢?

from sqlalchemy import Column, String, Integer, create_engine
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Person(Base):
    __tablename__ = 'person'
    id = Column(Integer, primary_key = True)
    name = Column(String(250), nullable=False)
    job = Column(String(250), nullable=False)

engine = create_engine('sqlite:///persons.sqlite')
session = sessionmaker()
session.configure(bind=engine)
Base.metadata.create_all(engine)

dct = {'John':'doctor', 'Alice':'typist'}

for el in dct:
    np = Person(name=el, job=dct[el])
    s = session()
    s.add(np)
    s.commit() 
4个回答

4

还有一种方法可以直接将Python字典插入到数据库中,而不使用for循环,也许这会对你有所帮助。

session.execute(Person.__table__.insert(), dict_values))
session.commit()
dict_values 是一个Python字典,其键名与数据库列的名称完全相同。例如:{'name': "John Doe", 'job': "Programmer"} 或者是字典列表,例如:[{'name': "John Doe", 'job': "Programmer"}, {...}, ...] 更多示例,请查看此链接: Optimize Inserts Using SQLAlchemy

4

这是我解决这个问题的方法,使用星号

dct = {'John':'doctor', 'Alice':'typist'}

data_obj= Table(**dct)


session.add(data_obj)
session.commit()

1

你的代码几乎完成了。之后可以查询你的数据库以进行验证。

from sqlalchemy import Column, String, Integer, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


class Person(Base):
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)
    job = Column(String(250), nullable=False)

engine = create_engine('sqlite:///persons.sqlite')
Base.metadata.create_all(engine)

session = sessionmaker(bind=engine)
s = session()

dct = {'John': 'doctor', 'Alice': 'typist'}

for key, value in dct.items():
    np = Person(name=key, job=value)
    s.add(np)

s.commit()

db_result = s.query(Person).all()
for row in db_result:
    print row.id, row.name, row.job

输出:

1 John doctor  
2 Alice typist

谢谢,那帮了很多忙! - McLovin

0

您不需要为每个项目创建新会话:

s = session()
for name, job in dct.iteritems():
    np = Person(name=name, job=job)
    s.add(np)
    s.commit() 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接