【发布时间】:2020-07-05 04:54:16
【问题描述】:
我将 FlaskSqlachemy 与 Postgresql 数据库一起使用。
我有一个名为 Order 的表和一个名为 Attempt(尝试交付订单)的表,它们是一对多的关系。尝试表有一个针对 order.id 的 FK。
我想在同一个会话中同时向 Order 和 Attempt 表中插入记录。问题是我在插入之前不知道 order.id。这是因为order.id是Order表的PK,具有自增功能。
我可以先插入订单,然后检查 order.id,最后插入尝试。我的问题是:如果第二次插入失败,我最终会得到一个没有与之关联的尝试的订单。
在这种情况下,最佳做法是什么?
以下是我的数据库模型的简化版本:
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
attempts = db.relationship('Attempt', backref='order', lazy='select',
order_by="Attempt.date")
class Attempt(db.Model):
id = db.Column(db.Integer, primary_key=True)
order_id = db.Column(None, db.ForeignKey('order.id'))
下面是我的解决方案:
# Create an order object
new_order = Order()
# Try to add it to db
try:
db.session.add(new_order)
db.session.commit()
except Exception:
....
return redirect(url_for('scheduleorder'))
else:
order = Order.query.filter_by(token=token).first()
# Create an attempt object
new_attempt = Attempt(order_id=order.id)
try:
db.session.add(new_attempt)
db.session.commit()
except Exception:
...
return redirect(url_for('scheduleorder'))
else:
...
return redirect(url_for('scheduleorder'))
【问题讨论】:
标签: python database postgresql sqlalchemy flask-sqlalchemy