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

问题描述 投票:1回答:3

我正在使用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

python sql sqlite sql-insert
3个回答
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()

Update

要创建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()

0
投票

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


0
投票

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

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

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

c.execute('''INSERT INTO mytable VALUES ({})'''.format(placeholders), mylist)
© www.soinside.com 2019 - 2024. All rights reserved.