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

Flask中MySQL语句WHERE子句如何正确使用AND/OR?

解决Flask中MySQL WHERE子句添加AND的语法错误

嘿,我瞅了下你的代码,问题还挺明显的,咱们一步步来捋清楚:

你代码里的几个核心问题:

  • SQL字符串拼接缺空格:你把几个SQL片段直接连在一起,比如"SELECT fname,lname,address,departmentname"和"FROM employee,department"之间没有空格,拼接后会变成SELECT fname,lname,address,departmentnameFROM employee...,数据库根本识别不了这种语法。
  • 关联字段表名写错:employeeID.departmentID应该是employee.departmentID吧?你的表是employee和department,不是employeeID表;另外department.EMP_departmentID大概率是笔误,应该是department.departmentID,不然关联逻辑不成立。
  • AND子句位置错误:你把AND department.departmentID= %s写在了SQL字符串外面,这会直接导致Python语法错误,必须把它整合到SQL字符串内部。

修正后的代码

先给你改好基础版本的:

c.execute(
    "SELECT fname, lname, address, departmentname "
    "FROM employee, department "
    "WHERE employee.departmentID = department.departmentID "
    "AND department.departmentID = %s",
    (datafromform,)
)

如果想让SQL更规范易读,推荐用显式JOIN写法(比隐式逗号分隔表的方式更清晰):

c.execute(
    "SELECT e.fname, e.lname, e.address, d.departmentname "
    "FROM employee e "
    "JOIN department d ON e.departmentID = d.departmentID "
    "WHERE d.departmentID = %s",
    (datafromform,)
)

为什么这样改?

  1. 每个SQL片段末尾都加了空格,确保拼接后的语句是数据库能识别的正确格式;
  2. 修正了表名和字段名的对应关系,保证关联逻辑正确;
  3. 把AND条件整合到SQL字符串里,让Python能正确解析整个查询语句,同时参数(datafromform,)也能安全绑定到%s的位置(这种参数绑定方式还能防止SQL注入,一定要坚持用哦)。

内容的提问来源于stack exchange,提问作者ShadowWalker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:05:53