拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 用Python创建MariaDB数据库

用Python创建MariaDB数据库

白鹭 - 2022-03-08 2134 0 0

我想撰写一个 python 脚本来创建新的 MariaDB 数据库。
数据库名称是用户输入。我尝试使用自变量来创建数据库:

#!/usr/bin/python3
import mysql.connector

mariadb_host = '127.0.0.1'
mariadb_port = 3306
mariadb_user = 'root'
mariadb_password = 'password'

mariadb_connection = mysql.connector.connect(
    host=mariadb_host,
    port=mariadb_port,
    user=mariadb_user,
    passwd=mariadb_password,
    use_pure=True
)

query = 'CREATE DATABASE %(db_name)s;'
args = {'db_name': 'test-db'}

result = None
cursor = mariadb_connection.cursor()
cursor.execute(query, args)
print(cursor.statement)
result = cursor.fetchall()
cursor.close()

出现以下错误:mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''test-db'' at line 1
看来,该命令cursor.execute附加'在数据库名称周围,这会导致无效的 sql 查询。

我怎样才能解决这个问题并根据用户输入安全地创建新数据库?

uj5u.com热心网友回复:

自变量替换符号 -%(name)s或者只是%s用于将插入到 SQL 陈述句中。

RDBMS 对值和识别符号(如数据库、表或列名称)有不同的参考规则。例如,一个字符串值会被单引号包围来告诉 RDBMS 这是一个字符值,但是单引号一个识别符号是一个语法错误;RDBMS 将要求使用其他字符(例如反引号、双引号、方括号,具体取决于 RDBMS)来参考识别符号。

如果要 使用 Python插入识别符号,则必须使用字符串格式化技术。例如,使用 f 字符串

db_name = 'test-db'
query = f'CREATE DATABASE `{db_name}`;'

请注意,最好用反引号参考动态识别符号名称来处理包含特殊字符的名称。

与动态 SQL 生成一样,在处理来自不受信任来源的资料时,您应该意识到 SQL 注入的风险。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *