MYSQL 语句中的动态表名 (Google Cloud SQL)

Posted

技术标签:

【中文标题】MYSQL 语句中的动态表名 (Google Cloud SQL)【英文标题】:Dynamic table names within MYSQL statement (Google Cloud SQL) 【发布时间】:2012-07-04 13:40:55 【问题描述】:

我正在尝试使用 Python(App Engine)从 Google Cloud SQL 中删除/删除一个表,但我希望表名基于一个变量,为简单起见,我在这里使用“你好”。出于某种原因,它向我抛出了一个错误:“您的 SQL 语法有错误;请查看与您的 mysql 服务器版本相对应的手册,以在第 1 行的 '-IN' 附近使用正确的语法”

我尝试了以下方法:

tabNameShort = 'hello'    
cursor = conn.cursor()
cursor.execute('DROP TABLE IF EXISTS %s', (tabNameShort))
conn.commit()

我也试过了:

tabNameShort = 'hello'    
cursor = conn.cursor()
cursor.execute('DROP TABLE IF EXISTS ' + tabNameShort)
conn.commit()

有什么建议吗?

【问题讨论】:

我的错误 - 真正的变量中有一个特殊字符(IN 之前的连字符),所以这解释了 SQL 语法错误。道歉。 如果有人感兴趣,只有版本 II 可以工作 - 第一个例子不行。 【参考方案1】:

试试这个:

tabNameShort = 'hello'    
cursor = conn.cursor()
cursor.execute('DROP TABLE IF EXISTS `%s`' % tabNameShort)
conn.commit()

【讨论】:

【参考方案2】:

警告:如果表名直接或间接从用户输入中派生,则直接使用“+”附加表名可能会导致 SQL 注入漏洞。

【讨论】:

以上是关于MYSQL 语句中的动态表名 (Google Cloud SQL)的主要内容,如果未能解决你的问题,请参考以下文章

mysql 从动态表名中查询数据

MySQL 动态sql语句运行 用时间做表名

经验与坑MyBatis+MySQL 返回格式化日期以及动态表名和字段名

如何动态替换sql中的表名

在 MySQL 中使用 SELECT 语句获取表名

mysql 存储过程 动态表名