使用 Python 创建 MariaDB 数据库
Create MariaDB database with Python
我想编写一个 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 查询。
我怎样才能解决这个问题并根据用户输入安全地创建新数据库?
参数替换符号 - %(name)s
或 %s
用于将 值 插入到 SQL 语句中。
RDBMS 对值和标识符(如数据库、table 或列名)有不同的引用规则。例如,一个字符串值将被单引号括起来,以告诉 RDBMS 这是一个字符值,但单引号标识符是一个语法错误; RDBMS 将要求使用其他字符(例如反引号、双引号、方括号,具体取决于 RDBMS)引用标识符。
如果您想使用 Python 插入 标识符 ,您必须使用字符串格式化技术。例如,使用 f-string
db_name = 'test-db'
query = f'CREATE DATABASE `{db_name}`;'
请注意,最好用反引号引用动态 identifier names 以处理包含特殊字符的名称。
与动态 SQL 生成一样,在处理来自不受信任来源的数据时,您应该意识到 SQL 注入的风险。
我想编写一个 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 查询。
我怎样才能解决这个问题并根据用户输入安全地创建新数据库?
参数替换符号 - %(name)s
或 %s
用于将 值 插入到 SQL 语句中。
RDBMS 对值和标识符(如数据库、table 或列名)有不同的引用规则。例如,一个字符串值将被单引号括起来,以告诉 RDBMS 这是一个字符值,但单引号标识符是一个语法错误; RDBMS 将要求使用其他字符(例如反引号、双引号、方括号,具体取决于 RDBMS)引用标识符。
如果您想使用 Python 插入 标识符 ,您必须使用字符串格式化技术。例如,使用 f-string
db_name = 'test-db'
query = f'CREATE DATABASE `{db_name}`;'
请注意,最好用反引号引用动态 identifier names 以处理包含特殊字符的名称。
与动态 SQL 生成一样,在处理来自不受信任来源的数据时,您应该意识到 SQL 注入的风险。