python - 如何使用 SQLAlchemy 将关系对象数据插入数据库?

标签 python postgresql sqlalchemy flask

我将 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/

相关文章:

python - 从 SQLAlchemy 中声明定义的实例获取主键的通用方法

python - 什么是 "AttributeError: ' _io.TextIOWrapper' 对象在 python 中没有属性 'replace' "?

python - python 中的多线程和异步套接字

sql - 同时使用 group by 和 order by 查询时间慢

sql - 如何在postgresql中删除一个表

python - 在Scrapy中使用Sqlalchemy更新表行

postgresql - 如何将 CASE 列添加到 SQLAlchemy 输出?

python - 注释堆叠的条形图 matplotlib 和 pandas

python - 为什么在Python中使用 "if __name__==' __main_ _': main()"而不是简单的 "main()"?

node.js - 即使在带有 PG 的 MacOS 上等待,typeorm createConnection 也返回 Pending