You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:47:36