Python 使用mysql.connector的cursor.execute替换字符串

Python 使用mysql.connector的cursor.execute替换字符串,python,mysql,mysql-python,mysql-connector,Python,Mysql,Mysql Python,Mysql Connector,我正在使用mysql.connector执行一些简单的SQL语句。在本例中,我创建了一个数据库模式。我希望将数据库作为变量传递,并在SQL中使用替换 我相信以下是避免SQL注入的适当技术 当您尝试替换数据库或表名时,mysql.connector似乎存在缺陷,在空格的情况下,这些名称通常会用反勾号包装,如mydb 如果我没有在%s周围加上反勾号,那么它将失败,并出现语法错误。 如果我在%s周围加上反勾,那么它将创建一个名称中带有单引号的数据库,如“mydb”。我只想要mydb作为名字 我发现的唯

我正在使用mysql.connector执行一些简单的SQL语句。在本例中,我创建了一个数据库模式。我希望将数据库作为变量传递,并在SQL中使用替换

我相信以下是避免SQL注入的适当技术

当您尝试替换数据库或表名时,mysql.connector似乎存在缺陷,在空格的情况下,这些名称通常会用反勾号包装,如
mydb

如果我没有在%s周围加上反勾号,那么它将失败,并出现语法错误。 如果我在
%s
周围加上反勾,那么它将创建一个名称中带有单引号的数据库,如“mydb”。我只想要mydb作为名字

我发现的唯一可行的方法是使用标准python替换来创建整个SQL语句,并将其传递给cursor.execute,但我认为这种技术是不受欢迎的

我已经使用过mysqldb,并且它工作得很成功,但是我想使用mysql.connector

这可以通过mysql.execute替换完成吗

import mysql.connector
import sys

dbname = "mydb"

#========================

try:
    db = mysql.connector.connect(host="localhost", user="alan", password="***")
except mysql.connector.Error as e:
    raise SystemExit("MySQL Error %d at line %d: %s" % (e.errno, sys.exc_info()[2].tb_lineno, e.msg.decode("utf8")))

cursor = db.cursor()     

try:
    cursor.execute("""
        CREATE DATABASE IF NOT EXISTS %s     
    """, (dbname,) )
except mysql.connector.Error as e:
    raise SystemExit("MySQL Error %d at line %d: %s" % (e.errno, sys.exc_info()[2].tb_lineno, e.msg.decode("utf8")))

db.commit()
cursor.close()
db.close()  

除非dbname是由不可信的源提供的,否则您可以使用字符串替换。@panofish我不确定Python模块为什么不支持这个,但是这个问题有很多重复,它们基本上都说“使用常规字符串替换”。谢谢dano。。。我没看到那些。我应该删除这个问题吗?