如何通过 sqlAlchemy 将字典列表添加到我的 sqlite 数据库中?
How do i add a list of dicts to my sqlite database via sqlAlchemy?
案例:
我有一个生成器,可以生成 som 密钥以及密钥 ID 和客户名称。
生成器输出一个类似这样的字典列表:
{'project': 'asdfasdfgg', 'key_id': 2, 'key': 't0n8x0RCAwKJ'}
{'project': 'asdfasdfgg', 'key_id': 3, 'key': 'FvBCCg@p4u4m'}
{'project': 'asdfasdfgg', 'key_id': 4, 'key': 'pjiNONS9H9jS'}
{'project': 'asdfasdfgg', 'key_id': 5, 'key': 'gpf4uUO97rgG'}
{'project': 'asdfasdfgg', 'key_id': 6, 'key': 'U999n89Fgbdj'}
{'project': 'asdfasdfgg', 'key_id': 7, 'key': '1eHBuMQ8GTrE'}
我想将这个字典添加到我的数据库中,我的代码如下:
main.py:
class Keys(Base):
__tablename__ = "keys"
id = Column(Integer, primary_key=True)
project = Column(String)
key_id = Column(Integer)
key = Column(String)
def create_key(request: Request, project: str = Form(...), amount: int = Form(...), db: Session =
Depends(get_db)):
keys = Keys()
data_generated = streamticket.thekeygenerator.keydata.generator(amount, project)
for d in data_generated:
keys.project = i["project"]
keys.key = i["key"]
keys.key_id = i["key_id"]
db.add(keys)
db.commit()
我的问题是它只是添加到数据库中的最后一个 dict/key。我的逻辑是它更新键 class 并且数据库只是更新并且不为 for 循环中的每个字典创建新行。
我已经阅读了文档并添加了我可以使用的多个项目 db.add_all 但我不明白我该如何使用这是我的情况,因为我只在每个周期更新密钥模型..
请对我好一点,这是我的第一个python项目:-)
您需要为每次调用 db.add()
创建一个新的 Keys()
实例。
所以,它变成了:
data_generated = streamticket.thekeygenerator.keydata.generator(amount, project)
for d in data_generated:
keys = Keys()
keys.project = d["project"]
keys.key = d["key"]
keys.key_id = d["key_id"]
db.add(keys)
db.commit()
这是因为 db.add
需要 Keys
的唯一实例。创建单个 Keys
实例会在每次迭代时重写它,因此只插入最后一个值。另请参阅 here and here。
唯一性,我的意思是 -
class Person:
pass
p1 = Person()
p2 = Person()
print(p1 == p1, p2 == p2) # True True
print(p1 == p2) # False
案例: 我有一个生成器,可以生成 som 密钥以及密钥 ID 和客户名称。
生成器输出一个类似这样的字典列表:
{'project': 'asdfasdfgg', 'key_id': 2, 'key': 't0n8x0RCAwKJ'}
{'project': 'asdfasdfgg', 'key_id': 3, 'key': 'FvBCCg@p4u4m'}
{'project': 'asdfasdfgg', 'key_id': 4, 'key': 'pjiNONS9H9jS'}
{'project': 'asdfasdfgg', 'key_id': 5, 'key': 'gpf4uUO97rgG'}
{'project': 'asdfasdfgg', 'key_id': 6, 'key': 'U999n89Fgbdj'}
{'project': 'asdfasdfgg', 'key_id': 7, 'key': '1eHBuMQ8GTrE'}
我想将这个字典添加到我的数据库中,我的代码如下: main.py:
class Keys(Base):
__tablename__ = "keys"
id = Column(Integer, primary_key=True)
project = Column(String)
key_id = Column(Integer)
key = Column(String)
def create_key(request: Request, project: str = Form(...), amount: int = Form(...), db: Session =
Depends(get_db)):
keys = Keys()
data_generated = streamticket.thekeygenerator.keydata.generator(amount, project)
for d in data_generated:
keys.project = i["project"]
keys.key = i["key"]
keys.key_id = i["key_id"]
db.add(keys)
db.commit()
我的问题是它只是添加到数据库中的最后一个 dict/key。我的逻辑是它更新键 class 并且数据库只是更新并且不为 for 循环中的每个字典创建新行。 我已经阅读了文档并添加了我可以使用的多个项目 db.add_all 但我不明白我该如何使用这是我的情况,因为我只在每个周期更新密钥模型..
请对我好一点,这是我的第一个python项目:-)
您需要为每次调用 db.add()
创建一个新的 Keys()
实例。
所以,它变成了:
data_generated = streamticket.thekeygenerator.keydata.generator(amount, project)
for d in data_generated:
keys = Keys()
keys.project = d["project"]
keys.key = d["key"]
keys.key_id = d["key_id"]
db.add(keys)
db.commit()
这是因为 db.add
需要 Keys
的唯一实例。创建单个 Keys
实例会在每次迭代时重写它,因此只插入最后一个值。另请参阅 here and here。
唯一性,我的意思是 -
class Person:
pass
p1 = Person()
p2 = Person()
print(p1 == p1, p2 == p2) # True True
print(p1 == p2) # False