python - PyMySQL - 使用字符串作为 cursor.execute 参数
问题描述
我的问题涉及在cursor.execute
下面传递一个字符串
import pymsyql
import json
connection = pymysql.connect(
host='localhost', user='u_u_u_u_u',
password='passwd', db='test',
charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor
)
def get_data(table):
try:
with connection.cursor() as cursor:
sql = """
SELECT * FROM %s;
"""
cursor.execute(sql, (table,))
result = cursor.fetchall()
return json.dumps([dict(ix) for ix in result])
except (TypeError, pymysql.err.ProgrammingError) as error:
print(error)
finally:
pass
get_data('table_1')
connection.close()
我得到错误
pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''table_1'' at line 1")
似乎execute
不希望将字符串作为参数传递;当我直接输入一个字符串时,例如cursor.execute(sql, ('table_1',))
,我得到了同样的错误。
我对导致问题的原因感到困惑,双引号''table_1''
令人困惑。谁能告诉我这里发生了什么?
解决方案
唉,您不能将表名作为参数传递。您必须将其放入查询字符串中:
sql = """
SELECT * FROM `{0}`;
""".format(table)
cursor.execute(sql)
推荐阅读
- c# - 如何让 ServiceProvider 对手动创建的对象调用 Dispose?
- c - 免费功能的使用
- c - 用 write 代替 printf 进行信号处理
- maven - 更改 Maven 快照时间戳
- c# - C# 将动态 XML 解析为对象并以 JSON 形式返回
- java - 已声明的变量无法解析
- python - 将 JSON 分页响应与 python 请求连接起来
- python - 使用小部件更新 Gmaps + Jupyter 中的标记
- php - Sinch Voice Callback REST API - 使用 PHP 作为电话会议的回调 URL
- c++ - 确保删除链表的所有元素