Python 创建sqlalchemy对象时遍历字段

Python 创建sqlalchemy对象时遍历字段,python,sqlalchemy,Python,Sqlalchemy,我试图循环通过json接收的dict,并通过sqlalchemy将结果保存到数据库中。我将字段名与dict中的键名保持一致。一遍又一遍地列出每个字段和dict似乎是重复的。但是当我尝试使用c.keys()之类的东西时,它就不起作用了。如果是这样,我可以做: 对于c.keys()中的键: customer.key=c[key] 但这是行不通的。我目前的代码是: for c in response['Customers']: customer = Customer() custome

我试图循环通过json接收的dict,并通过sqlalchemy将结果保存到数据库中。我将字段名与dict中的键名保持一致。一遍又一遍地列出每个字段和dict似乎是重复的。但是当我尝试使用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()
您可以使用Python函数,该函数符合以下要求:

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

中的键,假设您没有覆盖与另一个答案完全相同的键,那么您只需执行
\uuuu init\uuuuu
;它根据关键字参数设置属性:

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

session.commit()

c.keys()
会发生什么错误?您应该可以选择另一种方式:
对于c.keys()中的键:setattr(customer,key,c[key])
,诸如此类。。。或者试试
dir(customer)
,这可能会给你带来比你想要的更多的东西……而且,如果你真的想要这些密钥,我不能保证这是稳定的,但是
customer.\u sau instance\u state.attrs.keys()
看起来它也会给你这些密钥……Corley使用
作为c.keys中的密钥():setattr(customer,key,c[key])
工作正常,谢谢!如果您不必跳过值或一些额外的输入处理,这是可以的。