Python 创建sqlalchemy对象时遍历字段
我试图循环通过json接收的dict,并通过sqlalchemy将结果保存到数据库中。我将字段名与dict中的键名保持一致。一遍又一遍地列出每个字段和dict似乎是重复的。但是当我尝试使用c.keys()之类的东西时,它就不起作用了。如果是这样,我可以做: 对于c.keys()中的键: customer.key=c[key] 但这是行不通的。我目前的代码是: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
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])
工作正常,谢谢!如果您不必跳过值或一些额外的输入处理,这是可以的。