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,) )
为什么这样改?
- 每个SQL片段末尾都加了空格,确保拼接后的语句是数据库能识别的正确格式;
- 修正了表名和字段名的对应关系,保证关联逻辑正确;
- 把AND条件整合到SQL字符串里,让Python能正确解析整个查询语句,同时参数
(datafromform,)也能安全绑定到%s的位置(这种参数绑定方式还能防止SQL注入,一定要坚持用哦)。
内容的提问来源于stack exchange,提问作者ShadowWalker
相关产品推荐
相关产品推荐

