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

Posted

技术标签:

【中文标题】SQLITE3 - 使用循环将数据放入列中【英文标题】:SQLITE3 - Put Data in columns with a loop 【发布时间】:2017-12-23 21:46:13 【问题描述】:

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

【问题讨论】:

能否请您展示您的输入是什么样的(可能会缩小到 2-3 列)您希望输出是什么样的以及到目前为止您已经尝试过什么。如果您的问题很明确并且您为解决自己的问题付出了一些努力,那么 *** 的人将更有可能提供帮助。 【参考方案1】:

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

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()

【讨论】:

非常感谢。但是,如果我有 50 列,我该怎么办?我必须写 ... mytable(Column1, Column2....) 等等直到 Column50? 你在某处有列名列表吗? 是的,我没有将整个代码放在我之前的评论中,因为它太长了,但是我之前确实输入了我的 50 列中的每一列。有没有办法引用我表中的列号?就像 python 中的列表一样:mytable[3] 获取第三列【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

以上是关于SQLITE3 - 使用循环将数据放入列中的主要内容,如果未能解决你的问题,请参考以下文章

Sqlite3 从列中具有相似值的行获取数据

当数据达到 10 行时,如何将数据放入新列中?

熊猫:循环列表并从列中的列表中查找单词...使用列表中的找到的单词创建新列

如何将复杂的 JSON 字符串放入 SQL Server 列中

xcode sqlite3 如何将数据库从捆绑包复制到文档文件夹?

循环遍历列中的数据框值并使用 SQL 将它们用作 FROM 子句