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
相关产品推荐
相关产品推荐

