在创建 sqlalchemy 对象时遍历字段



我正在尝试遍历通过json收到的字典,并通过sqlalchemy将结果保存到数据库中。我使字段名称与字典中的键名称相同。列出每个字段并一遍又一遍地听写似乎是重复的。但是当我尝试使用 c.keys(( 之类的东西时,它不起作用。如果是这样的话,我可以做: 对于 c.keys(( 中的键: 客户密钥 = C[密钥]

但这行不通。我当前的代码是:

for c in response['Customers']:
customer = Customer()
customer.ID = c['ID']
customer.Name = c['Name']
customer.Currency = c['Currency']
customer.PaymentTerm = c['PaymentTerm']
customer.Discount = c['Discount']
customer.TaxRule = c['TaxRule']
customer.Carrier = c['Carrier']
session.add(customer)
session.commit()

您可以使用Python的setattr函数,根据文档

setattr(对象、名称、值(

参数是一个对象、一个字符串和一个任意值。字符串 可以命名现有属性或新属性。函数 将值分配给属性,前提是对象允许。

例如,setattr(x, 'foobar', 123)等效于x.foobar = 123

因此,您可以将代码编写为:

for c in response['Customers']:
customer = Customer()
for key, value in c.items(): 
setattr(customer, key, value)
# ^ usage of `setattr(...)` here
session.add(customer)
session.commit()

其中我假设您在类中定义了与dict对象c中存在的键相对应的所有属性。

您可以将字典解压缩为__init__参数,因为您没有覆盖声明式提供的默认构造函数,该构造函数完全按照其他答案的作用进行操作; 它从关键字参数设置属性:

for c in response['Customers']:
session.add(Customer(**c))
session.commit()

最新更新