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

2024-05-20 22:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,所有人,我有个错误

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

谢谢!


Tags: 代码in错误clausecolumnconnwherecursor
3条回答

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

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

由于MySQLdb对参数使用了不幸的符号%s,因此您应该做以下事情(还将样式修复为符合PEP8,不需要但不会造成伤害;-):

conn = MySQLdb.connect(host="localhost", user="user", passwd="pass", db="dbase")
cursor = conn.cursor()
q = 'SELECT * FROM %s WHERE course=%%s AND sec = %%s""" % (DEPT,)
cursor.execute(q, (CLASS, SEC))

生成q的字符串格式中的%%在格式化时变为单个%,因此q只剩下%s两个匹配项,而executeCLASSSEC的正确格式版本整洁地填充了这两个匹配项。所有的str调用都是多余的,等等

另外,如果您使用的是Python2.6或更高版本,那么对于字符串格式,您应该使用新的format方法,而不是旧的%运算符,这样您就不需要使用那些“加倍%符号”等优点。我还没有在上面的代码片段中应用这些更改,以防您陷入2.5或更早版本的困境(因此上面的代码可以在任何版本的Python中工作,而不仅仅是在最近的版本中)。

而不是:

course=%s

我认为你需要:

course='%s'

相关问题 更多 >