如何在sqlite3中插入几千列?

时间:2010-04-24 05:41:14

标签: python sqlite

类似于我的上一个问题,但我遇到了问题让我说我有一个简单的字典,如下面但它的Big,当我尝试使用下面的方法插入一个大字典时,我得到c.execute(架构)的操作错误对于太多列,那么什么应该是我填充sql数据库列的替代方法?使用alter table命令并单独添加每个命令?

import sqlite3
con = sqlite3.connect('simple.db')
c = con.cursor()

dic = {
    'x1':{'y1':1.0,'y2':0.0},
    'x2':{'y1':0.0,'y2':2.0,'joe bla':1.5},
    'x3':{'y2':2.0,'y3 45 etc':1.5}
    }

# 1. Find the unique column names.
columns = set()
for _, cols in dic.items():
    for key, _ in cols.items():
       columns.add(key)

# 2. Create the schema.
col_defs = [
    # Start with the column for our key name
    '"row_name" VARCHAR(2) NOT NULL PRIMARY KEY'
    ]
for column in columns:
    col_defs.append('"%s" REAL NULL' % column)
schema = "CREATE TABLE simple (%s);" % ",".join(col_defs)
c.execute(schema)

# 3. Loop through each row
for row_name, cols in dic.items():

    # Compile the data we have for this row.
    col_names = cols.keys()
    col_values = [str(val) for val in cols.values()]

    # Insert it.
    sql = 'INSERT INTO simple ("row_name", "%s") VALUES ("%s", "%s");' % (
        '","'.join(col_names),
        row_name,
        '","'.join(col_values)
        )

2 个答案:

答案 0 :(得分:6)

如果我理解你的话,你不是要插入数千行,而是插入数千列。 SQLite has a limit on the number of columns per table(默认情况下为2000),但如果重新编译SQLite,可以对其进行调整。从来没有这样做,我不知道你是否需要调整Python界面,但我不怀疑。

您可能想重新考虑您的设计。任何非数据仓库/ OLAP应用程序都不太可能需要或非常有效地使用数千个(行,是),而SQLite 是数据的良好解决方案仓库/ OLAP类型的情况。您可能会对entity-attribute-value setup之类的东西有所了解(对于真正的关系数据库而言,这不是正常的建议,而是一个有效的应用程序数据模型,更有可能满足您的需求而不会过多地推动SQLite的限制)。 / p>

答案 1 :(得分:0)

如果您确实要添加大量行并遇到问题,那么您的单笔交易可能会变得太大。

如果可以接受,则在给定行数之后(或者甚至在每次插入作为测试之后)执行COMMIT(commit())。

使用sqlite可以轻松完成数千行。达到数百万及以上,在某些时候可能需要更多。当然,取决于很多事情。