我正在开发一个小项目来学习 SQLAlchemy,我正在使用 Flask 和 Flask-SQLAlchemy。该项目旨在模拟一堆电视节目及其剧集。
当涉及到 SQLAlchemy 中的 INSERT OR UPDATE(或“upserts”)时,我正试图围绕最佳实践进行思考,但我无法克服这个障碍。似乎每当我创建模型实例时,SQLAlchemy(或 Flask-SQLAlchemy)都会INSERT
发表声明!这很奇怪,我认为这是不对的,但也许我错过了什么?
这里是模型的简化版本Episode
,它使用由三列值组成的复合主键,其中一个是模型的外键Show
:
class Episode(db.Model):
title = db.Column(db.String(256))
season = db.Column(db.Integer, primary_key=True)
episode = db.Column(db.Integer, primary_key=True)
# relationships
show_id = db.Column(db.Integer, db.ForeignKey('show.id'), primary_key=True)
show = db.relationship('Show', backref=db.backref('episodes', lazy='dynamic'))
这是似乎生成INSERT
语句的代码:
show = Show.query.filter_by(something=139).first()
ep = Episode(**{'title': 'foo',
'show': show,
'season': 39,
'episode': 1})
db.session.commit()
我猜这与我引用一个持久对象有关,但这肯定不应该生成一个INSERT
?
任何帮助表示赞赏!
我在 Windows 系统上使用 Python 2.7。我正在使用 Flask 0.10.1、Flask-SQLAlchemy 1.0 和 SQLAlchemy 0.8.3,它们都是通过 pip 安装的。