Python3:转义以编程方式构建的查询中的 MySQL 值
Python3: Escape MySQL values in programmatically built query
我正在构建一个 Python 脚本来将从各种来源接收的信息以 JSON 格式存储到 MariaDB 数据库中。并非所有来源都将完全可信,并且某些字段可能合法地包含引号和其他特殊字符(因此输入必须转义)并且并非所有数据库字段都是必需的。我需要以编程方式构建 SQL INSERT 查询,只添加存在的字段。 (在此之前我正在做一致性检查以确保处理的对象在将它们放入数据库之前是有效的)。
我已经看到 this answer on how to correctly escape using pymysql,但是,这假设您在编写脚本时知道将出现哪些字段。
insertKeys = 'INSERT INTO TableName('
insertValues = ') VALUES ('
for key, value in Values:
insertKeys = insertKeys + key + ','
insertValues = insertValues + "'" + value + "',"
insertKeys = insertKeys[:-1]
insertValues = inserValues[:-1] + ')'
sqlCommand = insertKeys + insertValues
构建此查询的安全方法是什么?and/or我需要将哪些字符转义为符合性检查函数中的哪些字符,然后才能以这种方式安全地构建查询?
正确的方法不是自己尝试清理/转义值,而是 properly use your db connector
fields = []
vals = []
for key, val in values:
fields.append(key)
vals.append(val)
fields = ", ".join(fields)
placeholders = ", ".join(["%s"] * len(fields))
sql = "insert into tablename({}) values({})".format(fields, placeholders)
cursor.execute(sql, values)
我正在构建一个 Python 脚本来将从各种来源接收的信息以 JSON 格式存储到 MariaDB 数据库中。并非所有来源都将完全可信,并且某些字段可能合法地包含引号和其他特殊字符(因此输入必须转义)并且并非所有数据库字段都是必需的。我需要以编程方式构建 SQL INSERT 查询,只添加存在的字段。 (在此之前我正在做一致性检查以确保处理的对象在将它们放入数据库之前是有效的)。
我已经看到 this answer on how to correctly escape using pymysql,但是,这假设您在编写脚本时知道将出现哪些字段。
insertKeys = 'INSERT INTO TableName('
insertValues = ') VALUES ('
for key, value in Values:
insertKeys = insertKeys + key + ','
insertValues = insertValues + "'" + value + "',"
insertKeys = insertKeys[:-1]
insertValues = inserValues[:-1] + ')'
sqlCommand = insertKeys + insertValues
构建此查询的安全方法是什么?and/or我需要将哪些字符转义为符合性检查函数中的哪些字符,然后才能以这种方式安全地构建查询?
正确的方法不是自己尝试清理/转义值,而是 properly use your db connector
fields = []
vals = []
for key, val in values:
fields.append(key)
vals.append(val)
fields = ", ".join(fields)
placeholders = ", ".join(["%s"] * len(fields))
sql = "insert into tablename({}) values({})".format(fields, placeholders)
cursor.execute(sql, values)