Python mysql cursor.execute() 有问题吗?
Python mysql cursor.execute() have issues?
我在使用 Python3.4.
从我的 MySQL
数据库获取数据时遇到了一些问题
这是我的代码:
connection = pymysql.connect(host='localhost',
user='root',
password=MY_PASSWD,
db=MY_DB,
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
with connection.cursor() as cursor:
# it doens't works works
table_name = 'id_pw'
key_name = 'url'
key_value = 'naver.com'
sql = "SELECT * FROM %s WHERE %s=\'%s\'"
cursor.execute(sql, (table_name, key_name, key_value))
# it works.
sql = "SELECT * FROM id_pw WHERE url=\'naver.com\'"
cursor.execute(sql)
你能告诉我哪里出了问题吗?我不知道我错过了什么。
您无法参数化 table 或列名称,为此使用字符串格式并为其他所有内容使用查询参数:
sql = "SELECT * FROM {table} WHERE {column} = %s".format(table=table_name, column=key_name)
cursor.execute(sql, (key_value, ))
请注意,您也不需要在占位符周围加上引号 - 数据库驱动程序会自动处理。
另外,请注意,请确保您信任 table_name
和 key_name
的来源,或者 validate/escape 它们。由于我们正在引入的字符串格式,请确保您的代码不易受到 SQL 注入的攻击。
我在使用 Python3.4.
MySQL
数据库获取数据时遇到了一些问题
这是我的代码:
connection = pymysql.connect(host='localhost',
user='root',
password=MY_PASSWD,
db=MY_DB,
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
with connection.cursor() as cursor:
# it doens't works works
table_name = 'id_pw'
key_name = 'url'
key_value = 'naver.com'
sql = "SELECT * FROM %s WHERE %s=\'%s\'"
cursor.execute(sql, (table_name, key_name, key_value))
# it works.
sql = "SELECT * FROM id_pw WHERE url=\'naver.com\'"
cursor.execute(sql)
你能告诉我哪里出了问题吗?我不知道我错过了什么。
您无法参数化 table 或列名称,为此使用字符串格式并为其他所有内容使用查询参数:
sql = "SELECT * FROM {table} WHERE {column} = %s".format(table=table_name, column=key_name)
cursor.execute(sql, (key_value, ))
请注意,您也不需要在占位符周围加上引号 - 数据库驱动程序会自动处理。
另外,请注意,请确保您信任 table_name
和 key_name
的来源,或者 validate/escape 它们。由于我们正在引入的字符串格式,请确保您的代码不易受到 SQL 注入的攻击。