SQLITE3 - 将数据放入带循环的列中

时间:2017-12-23 21:46:14

标签: python sql sqlite sql-insert

我正在使用SQLITE3。

在我的SQL表中,我有一个包含50列的表,我想在每列中放入My_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

3 个答案:

答案 0 :(得分:0)

我明白你要做什么。你几乎拥有它。你所拥有的是编写一行数据。只需将其放入循环中即可编写整个表格:

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替换为您自己的列:

conn = sqlite3.connect("testdatabase.db")
conn.execute('DROP TABLE IF EXISTS mytable')

# Create ['Column1', 'Column2', ..., 'Column50']
columns = ['Column%d' % n for n in range(1, 51)]

# Create 'Column1 TEXT, ... Column50 TEXT'
columns_declaration = ', '.join('%s TEXT' % c for c in columns)

conn.execute("CREATE TABLE mytable (%s)" % columns_declaration)

conn.commit()

答案 1 :(得分:0)

我在此post中回答了类似的问题我建议创建一个csv文件,然后使用bulk insert而不是insert into,因为逐行的速度非常慢,并且您不必担心列数或行数的方法。我是为sql server做的,但我很确定它可以在sqlite中使用。

答案 2 :(得分:0)

在SQL中,您可以省略INSERT INTO中的命名列,假设附加了每个列,并且值包含与相同表顺序对齐的所有列的数据。

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

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

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