python-sqlite问题插入方法

2024-10-01 11:20:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,row是由200个元素(数字)组成的元组,listOfVars是一个由200个字符串组成的元组,这些字符串是{}中的变量名。tupleForm是元组的列表,每个元组中有200个元素。在

以下代码不工作。它返回语法错误:

for row in tupleForm:
    cmd = '''INSERT INTO testTable listOfVars values row'''
    cur.execute(cmd)     

但是,下面的工作很好。有人能解释一下为什么吗?我发现sqlite太不直观了。在

^{pr2}$

谢谢你的帮助。在


Tags: 字符串代码incmd元素列表for数字
2条回答
insert_query = '''INSERT INTO testTable ({0}) VALUES ({1})'''.format(
               (','.join(listOfVars)), ','.join('?'*len(listOfVars)))
cur.executemany(insert_query, tupleForm)

请不要对数据库查询使用普通字符串插值。
我们很幸运有the DB-API,它详细解释了如何做你需要的。在

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

  1. 我们通过使用内置的SQL工具来避免字符串攻击
  2. executemany接受元组列表作为参数。在

第一次尝试使用字符串作为值,这是错误的。第二种方法将元组的字符串值替换为字符串,这两种情况下都会产生(...)。在

但是这两种形式都是不正确的,因为第二种形式根本没有转义值。您应该使用参数化查询。在

相关问题 更多 >