我正在使用 SQLalchemy 和 WTForms 编写 Flask 应用程序。
数据库更新有问题...我有很多对象表字段要更新。
所以我从这个开始......
# this works great but needs many lines of code
event.evt_num = form.evt_num.data
event.evt_name = form.evt_name.data
event.evt_location = form.evt_location.data
event.evt_address = form.evt_address.data
event.evt_city = form.evt_city.data
event.evt_state = form.evt_state.data
...
虽然上面的代码片段有效,但实际上它很大。所以我想变得更聪明,并通过属性迭代来更新数据库。所以我尝试了以下...
event_fields = ('evt_num', 'evt_name', 'evt_location', 'evt_address',
'evt_city', 'evt_state', 'evt_zip', 'evt_notes')
for aa in event_fields:
print "form data", getattr(form, aa).data # prints posted form data
print "db data", getattr(event, aa) # prints posted data from database
if getattr(form, aa).data != getattr(event, aa): # if form data shows a change
setattr(event, aa, getattr(form, aa).data) # update database does not work
db_change = True
session.flush()
...
此行无法更新数据库:
setattr(event, aa, getattr(form, aa).data)
我得到这个错误“AttributeError: 'Event' object has no attribute 'aa' “
非常感谢您的帮助。
最佳答案
如果你这样重组会怎样?
event_fields = ('evt_num', 'evt_name', 'evt_location', 'evt_address',
'evt_city', 'evt_state', 'evt_zip', 'evt_notes')
for aa in event_fields:
form_data = getattr(form, aa).data
db_data = getattr(event,aa)
print "form data", form_data # prints posted form data
print "db data", db_data # prints posted data from database
if form_data != db_data: # if form data shows a change
setattr(event, aa, form_data) # update database now works
db_change = True
session.flush()
...
这样,您可以减少对 getattr()
的调用,并且可以稍微优化您的代码。
关于python - 我如何使用字符串来表示 sqlalchemy 对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369686/