嘿,所有人,我有个错误
OperationalError: (1054, "Unknown column 'XX' in 'where clause'")
其中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
谢谢!
我也有同样的错误,我只是在模型和表中添加了一个新字段,即id字段。而且工作正常。
不要在SQL中使用“字符串注入”,除非它确实是必不可少的,比如这里的
str(DEPT)
来选择要从中选择的表。对于其他情况,请改用PythonDBAPI的参数传递特性——它将为您正确引用内容,并自动保护您免受“SQL注入”攻击等。(有时也可以更快)。由于MySQLdb对参数使用了不幸的符号
%s
,因此您应该做以下事情(还将样式修复为符合PEP8,不需要但不会造成伤害;-):生成
q
的字符串格式中的%%
在格式化时变为单个%
,因此q
只剩下%s
两个匹配项,而execute
用CLASS
和SEC
的正确格式版本整洁地填充了这两个匹配项。所有的str
调用都是多余的,等等另外,如果您使用的是Python2.6或更高版本,那么对于字符串格式,您应该使用新的
format
方法,而不是旧的%
运算符,这样您就不需要使用那些“加倍%符号”等优点。我还没有在上面的代码片段中应用这些更改,以防您陷入2.5或更早版本的困境(因此上面的代码可以在任何版本的Python中工作,而不仅仅是在最近的版本中)。而不是:
我认为你需要:
相关问题 更多 >
编程相关推荐