创建新数据库时,如何将参数传递给execute()

2024-10-03 21:34:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在学习使用MySQL和python

当我试图创建这样的新数据库时:

sql = 'CREATE DATABASE IF NOT EXISTS %s'
cursor.execute(sql, (self.DB_NAME,))

在本例中,DB\u 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(),而不是使用%


Tags: nameselfexecutedbsqlyourifcreate
1条回答
网友
1楼 · 发布于 2024-10-03 21:34:11

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

相关问题 更多 >