是否可以使用pymysql插入字典?

问题描述:

我有一个与数据库中的名称和列相同的字典。我可以按原样插入它,而不用重新编写INSERT INTO语句,并重新使用所有列名称进行键入?是否可以使用pymysql插入字典?

UPDATE

的问题是关于pymysql能力。您不需要编写代码,从字典中构建SQL声明。

PyMySQL和其他DB-API 2.0 adapter一样;参数必须放置在SQL查询中作为位置或命名占位符。如果你想避免直接命名列,你必须以编程方式生成占位符。

当您使用%(name)s参数语法时,PyMySQL支持使用参数字典执行查询。要从字典中生成插入语句,您可以使用:

def escape_name(s): 
    """Escape name to avoid SQL injection and keyword *es. 

    Doubles embedded backticks, surrounds the whole in backticks. 

    Note: not security hardened, caveat emptor. 

    """ 
    return '`{}`'.format(s.replace('`', '``')) 

names = list(dict_of_params) 
cols = ', '.join(map(escape_name, names)) # assumes the keys are *valid column names*. 
placeholders = ', '.join(['%({})s'.format(name) for name in names]) 

query = 'INSERT INTO TABLENAME ({}) VALUES ({})'.format(cols, params) 
cursor.execute(query, dict_of_params) 
+0

为什么不在库中完成? – Dims

+0

@Dims:为什么它应该是?你不能总是假定你有正确的列插入。如果您省略了必填列,该怎么办 –

+0

与我在SQL中省略必需的列相同 – Dims