【发布时间】:2016-07-20 06:15:23
【问题描述】:
我知道过去有人问过这个问题,但彻底搜索似乎并没有解决我的问题。我可能只是缺少一些简单的东西,因为我是 mysql 提供的 Python-mysql 连接器的新手。
我有一个访问 mysql 数据库的 Python 脚本,但我在从查询中删除引号时遇到了问题。这是我的代码:
import mysql.connector
try:
db = mysql.connector.connect(user='root', password='somePassword', host='127.0.0.1', database='dbName')
cursor = db.cursor()
query = "select * from tags where %s = %s"
a = 'tag_id'
b = '0'
cursor.execute(query, (a, b))
print cursor
data = cursor.fetchall()
print data
except mysql.connector.Error as err:
print "Exception tripped..."
print "--------------------------------------"
print err
cursor.close()
db.close()
我的数据库设置正确(我将很快证明)。
我对这个程序的输出是:
MySQLCursor: select * from tags where 'tag_id' = '0'
[]
然而,当我将查询更改为不使用变量时,例如:
cursor.execute("select * from tags where tag_id = 0")
那么我的输出变成:
MySQLCursor: select * from tags where tag_id = 0
[(0, u'192.168.1.110')]
对我来说,这意味着我的光标查询之间的唯一区别是引号。
如何从查询中删除它们?
提前致谢。
【问题讨论】:
-
这到底是怎么回事?
-
where条件只能使用参数,即... WHERE tag_id = %s。 -
如果您想删除引号,只需执行
cursor.execute(query%(a, b)) -
@dermen 这不是一个好主意,因为它使用 Python 的字符串格式而不是参数化查询引擎,这是一种非常糟糕的做法。
-
@dermen 我不认为
%d在这个库中有效。它应该保留为%s。