我将 SQLAlchemy 0.9 与 Python 2.7.6 和 Flask 一起使用。
我接收表单数据,将其放入对象并将对象添加到 session 中。当我尝试执行 db.commit() 时,我得到一个回滚,这似乎是由于 INSERT 语句中的关系对象。 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 的新手,因此已遵循文档中关于关系的内容。
模型中的两种数据类型(Site、School)都是整数。
最佳答案
您的其中一个字段是对象,而不是 ID 整数或字符串。见:
'fk_school_id': <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x8c274ac>
定义对象和 db.session.add(site) 时的代码是什么?在您的学校类(class)中,您有一个 site_id 字段作为外键吗?如果是这样,当您定义学校时,您可以说
school = School(name='x', .. site_id = site.id)
或者你可以说
site.school = school
关于python - 如何使用 SQLAlchemy 将关系对象数据插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566619/