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

时间:2014-07-29 18:24:10

标签: python mysql mysql-python mysql-connector

我使用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()  

0 个答案:

没有答案