通常,如果我想向表中插入值,我将执行类似以下的操作(假设我知道要插入的值属于哪些列):
conn = sqlite3.connect('mydatabase.db')
conn.execute("INSERT INTO MYTABLE (ID,COLUMN1,COLUMN2)\
VALUES(?,?,?)",[myid,value1,value2])
但是现在我有了一个列的列表(列表的长度可能会变化)和列表中每一列的值的列表。
例如,如果我有一个有10列的表(即,column1,column2 ...,column10等)。我有一个要更新的列的列表。假设[column3,column4]
。我有这些列的值的列表。[value for column3,value for column4]
。
如何将列表中的值插入到各自所属的列中?
4条答案
按热度按时间xn1cxnb41#
据我所知,
conn.execute
中的参数列表只对值有效,所以我们必须使用如下的字符串格式:请注意这是一个非常糟糕的尝试,因为传递到数据库的字符串将始终被检查是否存在注入攻击。但是,您可以在插入之前将列名列表传递给某个注入函数。
编辑日期:
对于不同长度的变量,您可以尝试如下操作:
pwuypxnk2#
当然,字符串格式也可以,只是需要更聪明一点。
d8tt03nd3#
我正在寻找一个基于未知/可变长度列表创建列的解决方案,并发现了这个问题。然而,我设法找到了一个更好的解决方案(反正对我来说),它也更现代一点,所以我想我会包括它,以防它对某人有帮助:
我的所有数据都是text类型,所以我只有一个变量“col_type”--但是你可以输入一个元组列表(或者元组的元组,如果你喜欢的话):
并将CREATE A COLUMN步骤更改为:
sq1bmfud4#
作为一个新手,我不能对@罗恩_g提供的简洁的更新解决方案发表评论。在测试时,虽然我不得不频繁地删除示例数据库本身,所以对于其他使用这个来测试的新手,我建议添加:
在'CREATE TABLE...'部分之前。
似乎有多个
在“CREATE TABLE...”和“ALTER TABLE...”中,因此尝试确定是否可以创建单个示例(类似于def节或包含在def节中)。