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

Flask中执行带CONCAT函数的MySQL查询始终返回1的问题

问题根源与解决方案

哦,这个问题我太熟了!你犯了一个很常见的错误——把cursor.execute()的返回值当成查询结果来用了。

为什么会插入1?

cur.execute()执行SELECT语句时,返回的不是查询到的实际内容,而是这条查询匹配到的行数。你这里查询到了1条符合条件的员工记录,所以它返回1,这就是who_created字段始终被插入1的原因——和CONCAT函数完全没关系,就算去掉CONCAT,只要查询到1条记录,返回的还是1。

修正后的代码

你需要拆分操作:先执行查询获取拼接后的姓名,再把这个姓名传入INSERT语句:

# 第一步:查询获取拼接后的完整姓名
cur.execute("SELECT CONCAT(first_name, ' ', last_name) FROM employees WHERE username = %s", [username])
# fetchone()返回第一个匹配的行(元组格式),取第一个元素就是我们要的姓名
full_name = cur.fetchone()[0]

# 第二步:执行插入操作,用获取到的full_name作为参数
cur.execute(
    "INSERT INTO jobs(job_id, job_name, company, who_created) VALUES(%s, %s, %s, %s)",
    (job_id, job_name, company, full_name)
)

额外建议:处理用户不存在的情况

如果担心传入的username不存在于employees表中,可以加个判断避免报错:

cur.execute("SELECT CONCAT(first_name, ' ', last_name) FROM employees WHERE username = %s", [username])
result = cur.fetchone()

if result:
    full_name = result[0]
    # 执行插入
    cur.execute(
        "INSERT INTO jobs(job_id, job_name, company, who_created) VALUES(%s, %s, %s, %s)",
        (job_id, job_name, company, full_name)
    )
else:
    # 这里可以根据业务需求处理,比如抛出异常或者返回错误提示
    raise ValueError(f"Username '{username}' not found in employees table")

内容的提问来源于stack exchange,提问作者murat yalçın

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:34:55