我可能遗漏了一些显而易见的东西,但我无法理解我的代码与MySQLdb在线文档中看到的各种示例有何不同。在
我对python编程比较陌生,对perl比较有经验。我要做的是尽早养成某些好习惯(比如在perl中,我总是从‘use strict;use warnings’)开始,所以我试图确保在一个独立的文件中创建可重用的函数(功能性py)为了节省我以后的时间。在
我有一个用于从表中选择随机行的函数:def returnRandom(conn,countcol,table,field):
cursor = conn.cursor()
cursor.execute('SELECT MAX(%s) FROM %s',(countcol,table))
maxRow = cursor.fetchone()[0]
cursor.execute("SELECT MIN(%s) FROM %s",(countcol,table))
minRow = cursor.fetchone()[0]
randomId = random.randrange(minRow,maxRow+1,1)
cursor.execute("SELECT ? FROM ? WHERE id >=? LIMIT 1",field,table,randomId)
return cursor.fetchone()[0]
它的名字是这样的:
^{pr2}$
不幸的是,它的错误是:
_mysql数据库_异常。编程错误:(1064,“您的SQL语法有错误;请查看与MySQL server版本相对应的手册,以了解在第1行“testtable”附近使用的正确语法)
如果我把testtable放在execute行上的%s,查询将运行,但看起来像是在运行SELECT MAX('id') FROM testtable;
当然会返回'id'。在
考虑到这两种情况,它在试图执行%s项时似乎在引用它们。我想知道是否有人能解释一下我是如何让它停止这样做的,或者我应该如何真正做到我想要达到的目标?我希望函数尽可能通用,因此依赖于调用时传递给它的数据。在
编辑:我应该补充一下,如果我换成了?标志:....
cursor.execute('SELECT MAX(?) FROM ?',(countcol,table))
File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 151, in execute
query = query % db.literal(args)
TypeError: not all arguments converted during string formatting