批量更新大型sqlite数据库

约翰尼斯

我有一个sqlite数据库(大约11 GB),其中有多个表,包括表distancevertices该表distance非常大(120 mio行),vertices较小(15000行)。我想在python中使用sqlite3来distance按中的另一列的值更新一列vertices表顶点在列上有一个索引,在上有cat另一个索引orig_cat

我在做什么:

import sqlite3
db_path='path/to/db.db'

conn = sqlite3.connect(db_path)
cur = conn.cursor()

cur.execute('''UPDATE distance SET 
                from_orig_v = (SELECT orig_cat FROM vertices WHERE cat=distance.source)''')

但是,在如此大的数据库上运行该update语句会导致内存错误。内存使用率一直稳定增长,直到崩溃为止。我是否在寻找建议以执行如此大的更新语句而又不会耗尽内存?也许以大块(即distance表的)来处理更新,并在例如对可用内存进行1000次更新后提交?如何在python / sqlite中完成?

CL。

应该可以使用如下语句更新块:

UPDATE distance SET ... WHERE rowid BETWEEN 100000 AND 200000;

您无需使用多个事务;实际上必须保留在内存中的唯一一件事就是在单个语句中要更新的行的列表。(从理论上讲,当内存用尽时,您应该收到一条适当的错误消息。实际上,某些操作系统会过度使用内存,并且直到为时已晚才告诉应用程序。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新大型SQLite数据库

来自分类Dev

批量更新数据库

来自分类Dev

SQLite大型数据库处理

来自分类Dev

SQLite大型数据库处理

来自分类Dev

如何批量插入SQLITE数据库?

来自分类Dev

更新SQLite数据库

来自分类Dev

将大型sqlite数据库导入表视图并进行更新

来自分类Dev

SQLite sqlite3_step()与大型数据库挂起

来自分类Dev

sqlite,在大型数据库中重新索引表的方法

来自分类Dev

Android Sqlite 数据库在执行批量插入时被锁定

来自分类Dev

使用大型mysql数据库改善查询更新

来自分类Dev

更新大型数据库时,PHP MySQL超时

来自分类Dev

使用字典中的值批量更新数据库

来自分类Dev

SQLite数据库在更新时挂起

来自分类Dev

从SQlite数据库更新图像

来自分类Dev

SQLite 3数据库未更新

来自分类Dev

更新值sqlite数据库

来自分类Dev

SQLite数据库更新导致错误

来自分类Dev

SQLite数据库更新未发生

来自分类Dev

SQLite 数据库 - 更新查询

来自分类Dev

更新附加的 sqlite 数据库

来自分类Dev

Python ETL-使用cx_Oracle批量或迭代将大型数据集加载到Oracle数据库中

来自分类Dev

如何使用AND条件更新SQLite数据库中的数据?

来自分类Dev

在iOS中写入/更新数据SQLite数据库

来自分类Dev

在Android sqlite数据库中更新单个数据

来自分类Dev

Android - 我无法从 SQLite 数据库更新数据

来自分类Dev

如何最有效地从大型 SQLite 数据库中提取数据?

来自分类Dev

SQLite 数据库

来自分类Dev

从数据框/ CSV向PostgreSQL数据库插入或更新批量数据