【flask sqlalchemy】A,B两个模型,A是父级模型,B是子级模型。 B创建依赖A模型的id。 如何编写事物 ?

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = '数据库连接字符串'
db = SQLAlchemy(app)

# 定义父级模型 A
class A(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    bs = db.relationship('B', backref='a', cascade='all, delete-orphan', lazy='dynamic')

# 定义子级模型 B
class B(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    a_id = db.Column(db.Integer, db.ForeignKey('a.id'))

# 创建 A 和 B 的事务
def create_a_and_b(a_name, b_name):
    # 开始事务
    db.session.begin()

    try:
        # 创建父级模型 A
        a = A(name=a_name)
        db.session.add(a)
        db.session.flush()  # 刷新会话以获取自动生成的 a.id, ⚠️注意这一行。非常重要

        # 创建子级模型 B
        b = B(name=b_name, a_id=a.id)
        db.session.add(b)

        # 提交事务
        db.session.commit()
        print("事务已提交")

    except Exception as e:
        # 出现异常,回滚事务
        db.session.rollback()
        print("事务已回滚")
        print("错误信息:", str(e))

    finally:
        # 关闭会话
        db.session.close()

# 调用函数创建 A 和 B 的事务
create_a_and_b("A模型名称", "B模型名称")
posted @ 2024-04-28 10:47  染指未来  阅读(2)  评论(0编辑  收藏  举报