创建sqlalchemy对象时循环遍历字段

时间:2017-07-03 22:01:56

标签: python sqlalchemy

我正在尝试遍历我通过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()

2 个答案:

答案 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()