我基本上是使用以下代码删除一个使用Python3.6和pymysql的现有表,其中包含一个MySQL5.7数据库:
connection = pymysql.connect(
host=host,
user=username,
password=password,
db=database,
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
table_name = "video_playback_statistics"
sql = "DROP TABLE IF EXISTS %s"
params = (table_name,)
with connection.cursor() as cursor:
cursor.execute(sql, params)
我得到以下错误:
pymysql.err.programmingerror:(1064,“您的sql语法有错误;查看与mysql服务器版本相对应的手册,以获取在第1行“视频\u播放\u统计”附近使用的正确语法
我已经成功地用更多参数执行了其他更复杂的sql语句,但是这个简单的语句不起作用。
当我在没有参数化的情况下运行sql命令时,它可以正常工作:
cursor.execute('DROP TABLE IF EXISTS video_playback_statistics')
我看了以下问题:
1064,“您的sql语法有错误;…”python mysql
pymysql返回错误sql语法
但这类查询似乎工作正常。
我也看到过:
python-mysql-update语句
但在这里,表名直接写入字符串。
1条答案
按热度按时间bvuwiixz1#
显然,根据这条评论,表名或列名的参数化是不可能的。由于某种原因,适配器为值插入了两个双引号,这会导致语法错误。
两种可能的解决办法是:
对参数使用反斜杠转义:
使用python字符串格式:
对于值(例如
INSERT
或者WHERE
语句),仍然应该使用参数化。