在F
las
k-
SQL
Alchemy中,使用db.session.execute()而不是db.
engine
.execute()来执行SQL语句。因为db.session执行的SQL语句会在一个事务内执行,而db.
engine
执行的
SQL
语句则不在事务内,从而可能导致所得结果集未被更新的情况。
下面是使用db.session.execute()的示例代码:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
# 定义模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
# 插入一条记录
db.session.add(User(name='Alice'))
db.session.commit()
# 更新记录
db.session.execute("UPDATE user SET name='Bob' WHERE id = 1")
db.session.commit()
# 查询记录
result = db.session.execute("SELECT * FROM user").fetchall()
print(result)
此时查询结果应该为:
[(1, 'Bob')]