小编Ped*_*lva的帖子

如何在 Flasksqlachemy 中同时插入父表和子表?

我正在使用 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'))
Run Code Online (Sandbox Code Playgroud)

现在我的解决方案如下:

    # 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 = …
Run Code Online (Sandbox Code Playgroud)

python database postgresql sqlalchemy flask-sqlalchemy

2
推荐指数
1
解决办法
2194
查看次数