python sqlite问题 - 插入方法

Cur*_*arn 1 python sqlite

在下面的代码中row是一个由200个元素(数字)组成listOfVars的元组,是一个200个字符串的元组,它们是变量名testTable.tupleForm是一个元组列表,每个元组中有200个元素.

以下代码不起作用.它返回语法错误:

for row in tupleForm:
    cmd = '''INSERT INTO testTable listOfVars values row'''
    cur.execute(cmd)     
Run Code Online (Sandbox Code Playgroud)

但是,以下工作正常.有人可以解释原因吗?我发现sqlite非常直观.

for row in tupleForm:
    cmd = '''INSERT INTO testTable %s values %s'''%(listOfVars, row) 
    cur.execute(cmd)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

ber*_*nie 7

insert_query = '''INSERT INTO testTable ({0}) VALUES ({1})'''.format(
               (','.join(listOfVars)), ','.join('?'*len(listOfVars)))
cur.executemany(insert_query, tupleForm)
Run Code Online (Sandbox Code Playgroud)

请不要对数据库查询使用常规字符串插值.
我们很幸运拥有DB-API,它详细解释了如何满足您的需求.

编辑:
为什么这种方法比第二次尝试更好的几个快速原因:

  1. 通过使用内置的字符串转义工具,我们可以避免SQL注入攻击,以及
  2. executemany 接受元组列表作为参数.