我将SQLAlchemy 0.9与Python 2.7.6和Flask一起使用。
我接收表单数据,将其放入对象并将对象添加到会话中。当我尝试执行db.commit()时,会得到一个回滚,这似乎是由于INSERT语句中的relationship对象造成的。SQL错误如下:
INFO sqlalchemy.engine.base.Engine INSERT INTO site (name, address1, address2, postcode, city, fk_country_id, fk_school_id) VALUES (%(name)s, %(address1)s, %(address2)s, %(postcode)s, %(city)s, %(fk_country_id)s, %(fk_school_id)s) RETURNING site.id
INFO sqlalchemy.engine.base.Engine {'city': u'New York', 'fk_school_id': <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x8c274ac>, 'name': u'Site1', 'address1': u'2 York Way', 'address2': u'', 'postcode': u'12345', 'fk_country_id': u'2'}
INFO sqlalchemy.engine.base.Engine ROLLBACK (ProgrammingError) can't adapt type 'InstrumentedAttribute'
模型中的关系代码如下:
class Site(db.Model):
id = db.Column(db.Integer, primary_key = True)
school = db.relationship('School', backref = 'site', uselist = False)
导致回滚的关系对象是什么?我是SQLAlchemy的新手,所以我遵循了它在文档中关于关系的内容。
模型中的两种数据类型(站点、学校)都是int。

最佳答案

其中一个字段是对象,而不是ID整数或字符串。见:

'fk_school_id': <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x8c274ac>

定义对象和db.session.add(site)时的代码是什么?在你的学校班级里,你有一个网站id字段作为外键?如果是这样,当你定义学校的时候,你可以说
school = School(name='x', .. site_id = site.id)

或者你可以说
site.school = school

关于python - 如何使用SQLAlchemy将关系对象数据插入数据库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21566619/

10-10 21:31
查看更多