我正在编写一个小 Python 脚本来帮助我为我的个人项目自动创建 mysql 数据库和相关帐户。该脚本的一部分是一个函数,它将数据库名称作为字符串,然后去创建数据库。
def createDB(dbConn, dbName):
import MySQLdb
c = dbConn.cursor()
query = """CREATE DATABASE %s;""";
c.execute(query, (dbName,))
这不起作用,因为MySQL 的 CREATE DATABASE要求数据库的不带引号的名称,如
CREATE DATAbASE test_db
但是我尝试将用户提供的数据库名称安全地插入到查询中的代码会创建:
CREATE DATABASE 'test_db'
你会得到“你的 MySQL 语法在测试附近有问题”。
即使这是供个人使用,我真的不想直接将用户提供的字符串插入到任何类型的查询中。它反对我的宗教。是否有一种安全的方法可以将用户提供的数据库名称插入到 python(或任何语言)中的 mySQL 查询中,以确保用户输入(例如test_db; DROP some_other_db;
将被拒绝或正确转义)?