我正在尝试遍历我通过json收到的字典,并通过sqlalchemy将结果保存到数据库中。我保持字段名称与字典中的键名相同。列出每个字段并一遍又一遍地显示重复。但是当我尝试使用像c.keys()这样的东西时,它不起作用。如果是这种情况我可以这样做: 对于c.keys()中的键: customer.key = c [key]
但这不起作用。我目前的代码是:
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()
答案 0 :(得分:1)
您可以使用Python的setattr
函数,根据document:
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
中存在的键对应的所有属性。
答案 1 :(得分:0)
您可以unpack your dictionaries as arguments到__init__
,因为您没有覆盖与其他答案完全相同的default constructor provided by Declarative;它设置关键字参数的属性:
for c in response['Customers']:
session.add(Customer(**c))
session.commit()