Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和mySQLdb错误:OperationalError:(1054,';where子句中的“未知列';”)_Python_Mysql_Mysql Error 1054 - Fatal编程技术网

Python和mySQLdb错误:OperationalError:(1054,';where子句中的“未知列';”)

Python和mySQLdb错误:OperationalError:(1054,';where子句中的“未知列';”),python,mysql,mysql-error-1054,Python,Mysql,Mysql Error 1054,嘿,大家好,我搞错了 操作错误:(1054,“where子句”中的未知列“XX”) 其中XX是以下代码中类的值 conn = MySQLdb.connect(host = "localhost",user = "user", passwd = "pass",db = "dbase") cursor = conn.cursor() cursor.execute("""SELECT * FROM %s WHERE course =%s AND sec = %s""" % (str(DEPT),str

嘿,大家好,我搞错了

操作错误:(1054,“where子句”中的未知列“XX”)

其中XX是以下代码中类的值

conn = MySQLdb.connect(host = "localhost",user = "user", passwd = "pass",db = "dbase")
cursor = conn.cursor()
cursor.execute("""SELECT * FROM %s WHERE course =%s AND sec = %s""" % (str(DEPT),str(CLASS),str(SEC),))
问题是,我只在某些值上得到这个错误,即,当类包含一个字母时。如果有帮助的话,我把桌子设置为varchar

谢谢

不要在SQL中使用“字符串注入”,除非它确实是必不可少的,例如这里的
str(DEPT)
可以选择要从中选择的表。对于其他情况,请改用Python DB API的参数传递特性——它将为您正确引用内容,并自动保护您免受“SQL注入”攻击等攻击。(有时也可能更快)

由于MySQLdb对参数使用了不幸的符号
%s
,因此您应该做以下几点(同时将样式固定为符合PEP8的,不是必需的,但不会影响;-):

字符串格式化中的
%%
s在格式化后生成
q
成为一个单独的
%%
,因此
q
剩下两个
%s
执行
用正确格式化的
类和
整齐地填充。所有的
str
调用都是冗余的,等等

另一方面,如果您使用的是Python 2.6或更高版本,那么对于字符串格式,您应该使用新的
格式
方法,而不是旧的
%
运算符,这样您就不需要使用那些“加倍的%符号”,以及其他优点。我没有在上面的代码片段中应用该更改,以防您被2.5或更早版本所困扰(因此上述代码可以在任何Python版本中使用,而不仅仅是在合理的最新版本中使用)。

而不是:

course=%s
我认为你需要:

course='%s'

我也有同样的错误,我只是在我的模型和表中添加了一个新字段,即id字段。而且它工作正常。

对不起,我对SQL和Python还不太熟悉。如果不是太大的问题,你能解释一下参数传递是什么吗?谢谢@吉尔,当然,看看我刚才对我的答案所做的编辑——我只是重写了你的代码以使其正确(为了优雅的风格,PEP8与空格的位置一致,并且通过避免大量冗余的
str
调用而更快速和可读,但这些只是次要问题;-)。Alex的答案是更好的方法。
course='%s'