SQLITE3使用循环将数据放入列中

2024-10-03 02:41:40 发布

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

我正在使用SQLITE3。在

在我的SQL表中,我有一个包含50列的表,我想在每一列中放入我的\u List的每个值,它有50个元素。在

有没有办法用python编写一个循环来将数据放入表中?我试图找出原因,但什么也没有得到。。。在

我目前的代码是3个变量,而不是50个变量:

import sqlite3
conn = sqlite3.connect("testdatabase.db")
c.execute('''CREATE TABLE mytable (Column1 text, Column2 text, Column3, 
text) ''')
c.execute('''INSERT INTO mytable (Column1, Column2, Column3) VALUES (?, 
?, ?)''', (myliste[0], myliste[1], myliste[2])

conn.commit()

非常感谢。在

Lcs公司


Tags: 数据text元素executesqlmytableconnsqlite3
3条回答

在SQL中,可以省略INSERT INTO中的命名列,假设每个列都被追加,并且值包括对齐到同一表顺序的所有列的数据。在

然后考虑动态构建参数化占位符:

placeholders = ', '.join(['?'] * 50)

c.execute('''INSERT INTO mytable VALUES ({})'''.format(placeholders), mylist)

我知道你想做什么。你几乎得到了。你所拥有的是写一行数据。只要把它放到一个循环中,你就可以写出整个表:

import sqlite3

conn = sqlite3.connect("testdatabase.db")
conn.execute("CREATE TABLE mytable (Column1 text, Column2 text, Column3 text)")

mytable = [
    ('a', 'b', 'c'),
    ('d', 'e', 'f'),
]

for myliste in mytable:
    conn.execute("""INSERT INTO
            mytable (Column1, Column2, Column3)
            VALUES (?, ?, ?)""",
        myliste)

conn.commit()

更新

要创建50列,如果已经有列列表,请将下面的变量columns替换为您自己的变量:

^{pr2}$

我在这个post中回答了一个类似的问题,我建议创建一个csv文件,然后使用一个bulk insert,而不是使用insert into,因为一行一行的速度非常慢,使用这种方法,您不必担心列数或行数。我是为sqlserver做的,但我确信它在sqlite中也能工作。在

相关问题 更多 >