Flask 数据库批量写入复杂数据:多表、多外键一次写入,如何回滚?
在 Flask 中使用数据库进行批量写入复杂数据时,可以使用数据库事务来实现回滚操作。下面是一个示例代码:\n\npython\nfrom flask import Flask\nfrom flask_sqlalchemy import SQLAlchemy\n\napp = Flask(__name__)\napp.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_url'\ndb = SQLAlchemy(app)\n\n# 定义数据模型\nclass Model1(db.Model):\n id = db.Column(db.Integer, primary_key=True)\n # ...\n\nclass Model2(db.Model):\n id = db.Column(db.Integer, primary_key=True)\n # ...\n\n# 在视图函数中使用事务进行数据写入\n@app.route('/example', methods=['POST'])\ndef example():\n try:\n # 开始事务\n db.session.begin_nested()\n\n # 批量写入数据\n model1 = Model1(...)\n model2 = Model2(...)\n # ...\n\n # 设置外键关系\n model1.model2 = model2\n # ...\n\n # 提交事务\n db.session.commit()\n except Exception as e:\n # 回滚事务\n db.session.rollback()\n return str(e), 500\n\n return 'Success'\n\nif __name__ == '__main__':\n app.run()\n\n\n上述代码中,db.session.begin_nested() 开始了一个嵌套事务,这样可以将多个操作放在同一个事务中。如果发生异常,可以通过 db.session.rollback() 来回滚整个事务。如果没有异常,则通过 db.session.commit() 提交事务。这样可以确保整个操作是原子性的,要么全部成功,要么全部回滚。\n\n请注意,具体的数据库操作需要根据你使用的数据库和数据模型来进行相应的调整。
原文地址: https://www.cveoy.top/t/topic/pjYK 著作权归作者所有。请勿转载和采集!