当前位置:首页 > 数据库 > SQlite

python – 用于CSV导入的SQLite事务

我是python的新手,并且一直致力于我的覆盆子pi以获得一个脚本并运行以将数百万个传感器数据记录导入sqlite.我想在事务中执行此操作以提高流程效率.我试图将事务分解为10k块,如下所示:Python CSV to SQLite

到目前为止我有

import csv, sqlite3, time

def chunks(data, rows=10000):
    for i in range (0, len(data), rows):
            yield data[i:i+rows]

if __name__ == "__main__":

    t = time.time()

con = sqlite3.connect('test.db')
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS sensor;")
cur.execute("CREATE TABLE sensor(key INT, reading REAL);")

filename = 'dummy.csv'
reader = csv.reader(open(filename,"r"))
divdata = chunks(reader)

for chunk in divdata:
    cur.execute('BEGIN TRANSACTION')

    for col1, col2 in chunk:
            cur.execute('INSERT INTO sensor (key, reading) VALUES (?, ?)', (col1, col2))

    con.execute('COMMIT')

我在python 3.2.3中收到以下错误:

Traceback (most recent call last):
File "/home/pi/test1.py", line 20, in <module>
for chunk in divdata:
File "/home/pi/test1.py", line 4, in chunks
for i in range (0, len(data), rows):
TypeError: object of type '_csv.reader' has no len()

我显然在某个地方搞乱了部分,因为一切(基本插入)在没有块和事务的情况下工作正常.任何帮助赞赏.

解决方法:

你的SQL看起来没问题.我确实看到你的CSV阅读器有问题:它不支持len()你在块()中使用它的方式.

您可以在数据循环中使用更典型的行,或者如果需要将文件分成块,则使用one of the techniques described in this thread.


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!