以下查询检索数据库中的每个预留,但我只想获取当前用户的预留。当我在mysql命令行中运行查询时,它可以工作。为什么我的应用程序无法正常使用?
from flaskext.mysql import MySQL
from flask.ext.login import LoginManager
from flask_login import current_user
...
db = MySQL()
db.init_app(app)
...
cur = db.connect().cursor()
cur.execute("SELECT ReservationID FROM Reservation WHERE user_name=" + "'" + current_user + "';")
reservation_instance = cur.fetchall()
答案 0 :(得分:1)
current_user
是User
个实例。你不能只是将它添加到字符串中,你需要使用它的用户名(假设你调用了属性“username”)。
您目前对SQL注入攻击持开放态度。 从不尝试自己将参数插入查询字符串。 始终使用参数化查询,让驱动程序可以正确地构建,引用和转义查询。
cur.execute('SELECT ReservationID FROM Reservation WHERE user_name=?', [current_user.username])
占位符字符(我在示例中使用?
)取决于驱动程序。考虑使用SQLAlchemy,它可以规范化这类事情,并且功能更强大。还有Flask-SQLAlchemy
可以更轻松地与Flask集成。