mysql 表名转义,Python、MySQLdb和转义表名?

我可能遗漏了一些显而易见的东西,但我无法理解我的代码与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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值