Python CSV 到 SQLite

2023-11-23

我正在“转换”一个大的(~1.6GB)CSV 文件并将CSV 的特定字段插入到SQLite 数据库中。基本上我的代码如下所示:

import csv, sqlite3

conn = sqlite3.connect( "path/to/file.db" )
conn.text_factory = str  #bugger 8-bit bytestrings
cur = conn.cur()
cur.execute('CREATE TABLE IF NOT EXISTS mytable (field2 VARCHAR, field4 VARCHAR)')

reader = csv.reader(open(filecsv.txt, "rb"))
for field1, field2, field3, field4, field5 in reader:
  cur.execute('INSERT OR IGNORE INTO mytable (field2, field4) VALUES (?,?)', (field2, field4))

一切都按照我的预期进行,除了......它需要大量的时间来处理。我编码错误吗?有没有更好的方法来实现更高的性能并完成我所需要的(只需将 CSV 的一些字段转换为 SQLite 表)?

**编辑 - 我尝试按照建议将 csv 直接导入 sqlite,但事实证明我的文件在字段中有逗号(例如"My title, comma")。这会在导入时产生错误。看来此类事件太多,无法手动编辑文件......

还有其他想法吗??**


Chris是正确使用交易;将数据分成块然后存储。

"...除非已经在事务中,否则每个 SQL 语句都会为其启动一个新事务。这是非常昂贵的,因为它需要重新打开、写入和关闭每个语句的日志文件。这可以通过用 BEGIN TRANSACTION 包装 SQL 语句序列来避免;和结束交易;声明。对于不改变数据库的语句也可以获得这种加速。“ - 来源:http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

"...还有另一个技巧可以用来加速 SQLite:事务。每当您必须执行多个数据库写入操作时,请将它们放入事务中。与每次发出写入查询时写入(并锁定)文件不同,写入只会在事务完成时发生一次。“ - 来源:SQLite 的可扩展性如何?

import csv, sqlite3, time

def chunks(data, rows=10000):
    """ Divides the data into 10000 rows each """

    for i in xrange(0, len(data), rows):
        yield data[i:i+rows]


if __name__ == "__main__":

    t = time.time()

    conn = sqlite3.connect( "path/to/file.db" )
    conn.text_factory = str  #bugger 8-bit bytestrings
    cur = conn.cur()
    cur.execute('CREATE TABLE IF NOT EXISTS mytable (field2 VARCHAR, field4 VARCHAR)')

    csvData = csv.reader(open(filecsv.txt, "rb"))

    divData = chunks(csvData) # divide into 10000 rows each

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

        for field1, field2, field3, field4, field5 in chunk:
            cur.execute('INSERT OR IGNORE INTO mytable (field2, field4) VALUES (?,?)', (field2, field4))

        cur.execute('COMMIT')

    print "\n Time Taken: %.3f sec" % (time.time()-t) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python CSV 到 SQLite 的相关文章

随机推荐

  • 如何在prometheus yml配置文件中配置特定IP?

    我想使用特定的 IP 地址运行 Prometheus 默认情况下 它在本地主机上运行 我在中没有看到任何这样的选项普罗米修斯配置 您可以使用命令行选项来配置监听地址 prometheus web listen address 0 0 0 0
  • 在 UIView 中创建内部阴影[重复]

    这个问题在这里已经有答案了 我想在我的身上创造一个内在的阴影UIView在 iPad 上这样 This UIView可以改变大小 所以我不能使用简单的图像来创建这种阴影 我已经测试过setShadow等等 但它只是创建了一个投影 知道如何创
  • 从 SharedPreferences 设置和获取 StringSet?

    我正在构建一个 Android 应用程序 我想在首选项中存储一组字符串 以便根据登录信息跟踪谁使用了该应用程序 我不想使用数据库 所以我知道我应该使用 SharedPreferences 来存储登录人员的列表 我希望能够重置此列表 以便将个
  • 使用中位数和分组依据以及谷歌表格进行查询

    我需要获得分组中位数 我已经对表单的数据进行了分组 From type Weight A person person 4 A person person 3 A person organization 11 A person person
  • 在 QToolTip 中使用图片或图像

    有没有办法在 QToolTip 中显示图片 图像 我想显示键盘按钮的小图像 以向用户解释他可以在该特定小部件上使用哪些按钮 快捷方式 您可以使用以下 html 代码轻松显示图像 QToolTip showText QCursor pos i
  • AngularJS 和谷歌云端点:需要演练

    我是 AngularJS 的新手 但我真的很喜欢 AngularJS 的工作方式 因此我想将其部署为我的 Google 云端点后端的客户端 然后我立即遇到两个问题 1 放在哪里我的回调 那么它能够在 ANGularJs 控制器中工作吗 2
  • 在字符串中包含常量而不连接

    PHP 中有没有一种方法可以在字符串中包含常量而无需连接 define MY CONSTANT 42 echo This is my constant MY CONSTANT No 对于字符串 PHP 无法区分字符串数据和常量标识符 这适用
  • 使用元素求幂加速嵌套 for 循环

    我正在编写一个大型代码 我发现自己需要加速其中的特定部分 我创建了一个MWE如下图所示 import numpy as np import time def random data N Generate some random data r
  • 如何以编程方式打开 Safari 扩展 ToolbarItem 弹出窗口

    我想以编程方式触发 Safari 扩展工具栏项目上的 单击 事件 以便在网页上发生某些情况后出现我的自定义弹出窗口 我正在使用新的 Xcode 扩展 IDE 并使用界面生成器构建了我的弹出窗口 目前 StackOverflow 上的所有答案
  • 使用 .bat 文件运行 php 脚本

    我需要每天晚上在我的服务器上运行一个 php 脚本 在 Linux 系统上我设置了一个 cron 作业 但我被困在 Windows 系统上 我知道我必须使用 Windows 任务计划程序设置一个任务 并且该任务需要运行一个 bat 文件 该
  • 向 DataTable 添加多行

    我知道有两种方法将带有数据的新行添加到DataTable string arr2 one two three dtDeptDtl Columns Add Dept Cd for int a 0 a lt arr2 Length a Data
  • 关于 C 中的 ## 预处理器

    Given define cat x y x y 电话cat a 1 回报a1 but cat cat 1 2 3 未定义 但是如果我也定义 define xcat x y cat x y 那么结果是xcat xcat 1 2 3 就是现在
  • RequireJS:根据环境加载不同的文件

    是否有根据当前项目环境 例如开发或生产 加载不同文件的功能 我的意思是 它可以帮助我透明地加载缩小或完整的文件 我读到有关多版本加载的内容 但多版本意味着我需要指定文件的版本 例如 我的模块中有 module js 文件 在这个文件中我需要
  • CSS 媒体查询 - 顺序很重要吗?

    现在我经常使用 CSS 媒体查询 我想知道最好按什么顺序使用它们 Method 1 media only screen and min width 800px content sidebar media only screen and ma
  • 获取文件的 QuickLook 预览图像

    有什么方法可以快速查看文件的预览图像吗 我正在寻找这样的东西 NSImage image QuickLookPreviewer quickLookPreviewForFile path See QLThumbnailRequest在文档中
  • Flutter 中的水平步进器

    我想创建一个水平步进器 我知道这很容易 但是这一次 步数应该很大 举个例子 这就是我在垂直领域所做的事情 import package flutter material dart void main gt runApp new MyApp
  • 在 C++ 中如何实现多个 COM 接口?

    我试图理解这个示例代码关于浏览器帮助程序对象 在内部 作者实现了一个公开多个接口 IObjectWithSite IDispatch 的类 他的 QueryInterface 函数执行以下操作 if riid IID IUnknown pp
  • 如何验证 jar 内 MANIFEST.MF 的顺序?

    我遇到了一个有趣的问题 这对我来说绝对是新的 正如我突然发现的 Jar 规范说 被包含在内 META INF and MANIFEST MF必须是第一个和第二个条目 jar包而不仅仅是存档中的目录和文件 我正在使用 Java 框架 非常注意
  • 如何在 C++/CLI 中使用 boost::bind 绑定托管类的成员

    我在本机 C 类中使用 boost signal 现在我正在 C CLI 中编写 NET 包装器 以便可以将本机 C 回调公开为 NET 事件 当我尝试使用 boost bind 获取托管类的成员函数的地址时 出现编译器错误 3374 指出
  • Python CSV 到 SQLite

    我正在 转换 一个大的 1 6GB CSV 文件并将CSV 的特定字段插入到SQLite 数据库中 基本上我的代码如下所示 import csv sqlite3 conn sqlite3 connect path to file db co