Python和mySQLdb错误:OperationalError:(1054,';where子句中的“未知列';”)
嘿,大家好,我搞错了 操作错误:(1054,“where子句”中的未知列“XX”) 其中XX是以下代码中类的值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
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'