Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 简单的;创建;或;“下降表”;PyMySQL和参数替换失败_Python_Mysql_Pymysql - Fatal编程技术网

Python 简单的;创建;或;“下降表”;PyMySQL和参数替换失败

Python 简单的;创建;或;“下降表”;PyMySQL和参数替换失败,python,mysql,pymysql,Python,Mysql,Pymysql,我基本上是使用以下代码删除一个使用Python 3.6和PyMySQL的现有表,以及一个MySQL 5.7数据库: connection = pymysql.connect( host=host, user=username, password=password, db=database, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) table_name = "video

我基本上是使用以下代码删除一个使用Python 3.6和PyMySQL的现有表,以及一个MySQL 5.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行“视频播放统计信息”附近使用的正确语法”

我已经成功地执行了其他具有更多参数的更复杂的SQL语句,但这个简单的语句不起作用

当我在没有参数化的情况下运行SQL命令时,它工作正常:

cursor.execute('DROP TABLE IF EXISTS video_playback_statistics')
我已经研究了以下问题:

但这类查询似乎工作正常

我也看到了:


但是在这里,表名直接写入字符串。

根据,表名或列名的参数化显然是不可能的。由于某种原因,适配器为值插入了两个双引号,这会导致语法错误

两种可能的解决办法是:

  • 对参数使用反斜杠转义:

    sql = "DROP TABLE IF EXISTS `%s`"
    
  • 使用Python字符串格式:

    sql = "DROP TABLE IF EXISTS {}".format(table_name)
    
  • 对于值(例如,在
    INSERT
    WHERE
    语句中),仍应使用参数化