Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3:在以编程方式构建的查询中转义MySQL值_Mysql_Python 3.x_Escaping - Fatal编程技术网

Python3:在以编程方式构建的查询中转义MySQL值

Python3:在以编程方式构建的查询中转义MySQL值,mysql,python-3.x,escaping,Mysql,Python 3.x,Escaping,我正在构建一个Python脚本,以JSON格式将从各种来源收到的信息存储到MariaDB数据库中。并非所有源都是完全可信的,某些字段可能合法地包含引号和其他特殊字符(因此输入必须转义),并且并非所有数据库字段都是必需的。我需要以编程方式构建SQLINSERT查询,只添加存在的字段。(在此之前,我正在进行一致性检查,以确保处理过的对象在放入数据库之前是有效的) 但是,我已经看到,这假设您在编写脚本时知道将出现哪些字段 insertKeys='INSERT INTO TableName(' inse

我正在构建一个Python脚本,以JSON格式将从各种来源收到的信息存储到MariaDB数据库中。并非所有源都是完全可信的,某些字段可能合法地包含引号和其他特殊字符(因此输入必须转义),并且并非所有数据库字段都是必需的。我需要以编程方式构建SQLINSERT查询,只添加存在的字段。(在此之前,我正在进行一致性检查,以确保处理过的对象在放入数据库之前是有效的)

但是,我已经看到,这假设您在编写脚本时知道将出现哪些字段

insertKeys='INSERT INTO TableName('
insertValues=')值('
对于键,值中的值:
insertKeys=insertKeys+key+','
insertValues=insertValues+“'”+value+“,”
insertKeys=insertKeys[:-1]
insertValues=insertValues[:-1]+')'
sqlCommand=insertKeys+insertValues

构建此查询的安全方法是什么,和/或我需要哪些字符转义到我的符合性检查函数中的什么,然后以这种方式安全地构建查询?

正确的方法不是尝试清理/转义值,而是

有人吗?-)
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)