MST

星途 面试题库

面试题:Python Flask框架下数据库连接与事务管理

在基于Python Flask构建的Web应用中,使用SQLAlchemy进行数据库连接。描述如何在Flask应用中正确配置SQLAlchemy连接到MySQL数据库。并且阐述在涉及多个数据库操作的业务逻辑中,如何使用事务来确保数据的一致性,例如在一个用户注册并同时创建相关关联数据的场景下。
34.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 配置SQLAlchemy连接到MySQL数据库
    • 首先安装所需库,pip install flask sqlalchemy
    • 在Flask应用中配置如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 配置MySQL连接字符串,格式为 mysql+pymysql://用户名:密码@主机地址:端口/数据库名
app.config['SQLALCHEMY_DATABASE_URI'] ='mysql+pymysql://root:password@127.0.0.1:3306/mydb'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
  1. 使用事务确保数据一致性
    • 在Flask - SQLAlchemy中,使用db.session来管理事务。例如在用户注册并创建相关关联数据场景下:
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    # 假设有关联表
    related_data = db.relationship('RelatedData', backref='user', lazy=True)

class RelatedData(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    data = db.Column(db.String(200))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

@app.route('/register', methods=['POST'])
def register():
    try:
        # 创建用户
        new_user = User(username='new_user')
        db.session.add(new_user)
        # 创建关联数据
        new_related_data = RelatedData(data='some data', user=new_user)
        db.session.add(new_related_data)
        # 提交事务
        db.session.commit()
        return '注册成功'
    except Exception as e:
        # 出现异常回滚事务
        db.session.rollback()
        return f'注册失败: {str(e)}'
    finally:
        # 关闭会话
        db.session.close()

在上述代码中,try块内进行数据库操作,若操作成功则commit提交事务;若出现异常,rollback回滚事务,确保数据一致性。finally块用于关闭会话。