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)的主要内容,如果未能解决你的问题,请参考以下文章