如何向MySQL查询传递值?Flask内连接传user_id遇SQL语法错误
解决Flask中MySQL内连接传参的语法错误问题
先帮你拆解下出现错误的两个核心原因,以及对应的修复方案:
1. INNER JOIN USING的语法误用
USING关键字的正确用法是直接指定关联的列名(前提是两个表的关联列同名),而不是在后面写条件判断。你的代码里把条件写在了USING后面,这直接违反了MySQL的语法规则,导致了1064错误。
正确的关联写法应该是先通过USING(user_id)关联两个表,再通过WHERE子句筛选指定的user_id值。
2. 不安全的参数传递方式
你直接用字符串格式化% user_id把值拼进SQL语句里,不仅会引发语法问题,还会带来SQL注入的安全风险。MySQL Connector支持参数化查询,应该在执行SQL时通过参数传递值,而不是直接拼接。
修复后的完整代码示例
from flask import Flask import mysql.connector # 假设这是你的Flask应用上下文 app = Flask(__name__) def get_user_coupons(msg_received): user_id = msg_received["user_id"] # 修正SQL语句:先关联列,再用WHERE筛选 select_query1 = """ SELECT * FROM user_table INNER JOIN coupon_table USING(user_id) WHERE user_id = %s """ # 建立数据库连接(这里假设你已经有正确的连接配置) conn = mysql.connector.connect( host="your_host", user="your_user", password="your_password", database="your_db" ) cursor = conn.cursor(dictionary=True) # 可选:返回字典格式的结果 # 用参数化方式传递user_id,第二个参数是元组形式 cursor.execute(select_query1, (user_id,)) result = cursor.fetchall() # 记得关闭游标和连接 cursor.close() conn.close() return result
额外提醒
- 如果你的两个表关联列名不同,就不能用
USING,得换成ON,比如INNER JOIN coupon_table ON user_table.id = coupon_table.user_id - 永远不要用字符串拼接的方式传递SQL参数,参数化查询是最安全且规范的做法
内容的提问来源于stack exchange,提问作者ansh sagat
相关产品推荐
相关产品推荐

