我有一个sqlite数据库(大约11GB),它有多个表,包括表距离
和顶点
。表距离
相当大(1.2亿行),顶点
较小(15000行)。我想在python中使用sqlite3通过顶点中另一列的值来更新
距离中的一列。表格顶点在列
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)''')
无论在如此大的数据库上运行该更新语句,都会导致内存错误。内存使用量稳步增加,直到崩溃。我正在寻找建议,以执行如此大的更新语句而不运行内存溢出?也许可以处理块(即<代码>距离
表的行)更新,并在例如1000次更新后提交到空闲内存?在python/sqlite中如何做到这一点?
应该可以用如下语句更新块:
UPDATE distance SET ... WHERE rowid BETWEEN 100000 AND 200000;
您不需要使用多个事务;实际上,唯一必须保存在内存中的是要在一条语句中更新的行列表。(理论上,当内存耗尽时,你应该得到一条适当的错误消息。实际上,一些操作系统过度使用内存,直到为时已晚才告诉应用程序。)
问题内容: 我需要处理一些比RAM大数百倍的数据。我想读一个大块,进行处理,保存结果,释放内存并重复。有没有办法在python中提高效率呢? 问题答案: 常规键是您要迭代处理文件。 如果您只处理文本文件,那么这很简单:一次只能读取一行。(实际上,它可以缓冲所有内容,但是缓冲区足够小,您不必担心。) 如果您要处理其他特定文件类型(例如numpy二进制文件,CSV文件,XML文档等),则通常会有类似的
我是在Android应用程序中使用SQL的新手,并且我在更新使用listView创建的表时遇到了一些麻烦。我设法从listView中更新了一个元素,但它不是正确的元素,它总是列表中的第一个元素发生了变化。 我制作了一个只有一列的表(稍后我将添加更多的两列),下面是我如何构建它: TaskContract_Faltas.java TaskDbHelper_Faltas Faltas.java 我使用
如何使用数据砖增量从其他表中更新表中的多个记录。 我想达到这样的目标: 它失败并出现错误:不匹配的输入“发件人”期望
这是提供用户输入的主活动 } 这是Add_prople类 公共类Add_people扩展AppCompatActivity实现视图。OnClickListener{private EditText name EditText;private EditText ageEditText;private EditText heightEditText;private EditText weightede
主要内容:SQLite 存储类,SQLite 亲和(Affinity)类型,SQLite 亲和类型(Affinity)及类型名称,Boolean 数据类型,Date 与 Time 数据类型SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。 您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。 SQLite 存储类 每个存
问题内容: 我正在通过Zentus在Java应用程序中使用SQLite。在这种情况下,我需要在数据库中保存和查询Java 值。来自其他RDBMS,我创建了如下表来存储长值: 该解决方案会产生例外的行为,但是在阅读了有关数据类型的SQLite文档之后,我了解到我的类型与使用=> 作为文本存储具有相同的作用。 然后,我决定将其更改为(长度是可变的,并且最多可以存储64位整数,即Java long的长度