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模型名称")