我现在正在学习将MySQL与python结合使用。
当我尝试像这样创建新的数据库时:
sql = 'CREATE DATABASE IF NOT EXISTS %s'
cursor.execute(sql, (self.DB_NAME,))
在这种情况下,DB_NAME是字符串
self.DB_NAME = 'bmagym'
我收到此错误:
MySQL Error [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 ''bmagym'' at line 1
但是,如果我将代码替换为:
sql = 'CREATE DATABASE IF NOT EXISTS %s' %self.DB_NAME
cursor.execute(sql)
它按预期工作。
我的问题是如何将参数传递给execute()而不是使用%?
最佳答案
SQL语法中的数据库名称的写法如下
`dbname`
SQL也接受普通的
dbname
。CREATE DATABASE IF NOT EXISTS dbname
# works like
CREATE DATABASE IF NOT EXISTS `dbname`
# BUT: only if dbname is not a SQL keyword.
cursor.execute()
函数将自动格式化和转义字符串(防止SQL注入)。因此执行此查询:CREATE DATABASE IF NOT EXISTS 'dbname'
这是语法错误。 Here is a similar topic on this question.第二种方法很好,只需用python
%
运算符替换数据库名称即可。sql = 'CREATE DATABASE IF NOT EXISTS `%s`' %self.DB_NAME
关于python - 创建新数据库时如何将参数传递给execute(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41893681/