Python SQLite - 数据库是否加载到内存中(RAM)?

3

我正在考虑在Python中使用sqlite3库来进行一些数据存储。对于我来说,避免将过多的数据加载到内存中非常重要 - 可能有大量(10个以上)的GB级别的数据,我希望能够以这样的方式访问它,即数据不会一次性全部加载到RAM中。sqlite3是否可以为我完成这项任务?我具体考虑以下代码:

import sqlite3
conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute('''SELECT * FROM table1''')

var = c.fetchall()

假设example.db占用了14 GB,table1占用了1 GB。有多少数据会加载到RAM中?


1
这将取决于您的操作系统。 - korylprince
什么阻止你尝试并检查实际内存消耗? - joaquin
1个回答

4

你几乎肯定不想使用fetchall(),它会将整个表加载到RAM中,以及所需的所有管理工作,因此“超过1 GB”是你的答案。相反,请使用fetchone()


那么明确一下 - 在你的情况下,在fetchone()命令之前没有任何东西被加载到RAM中吗?在conn = sqlite3.connect('example.db')c.execute("stuff")时也没有加载任何内容吗? - SheerSt
不,显然在fetchone()调用之前会有某些内存使用,并且很可能是fetchone()进行了一些缓冲,以便每次使用超过一行的数据,但是fetchone()fetchall()节省大量内存。我有一个650MB的数据库,基本上全部都在一个表中。fetchall()使用约2GB的内存。 fetchone()不会导致内存使用量明显增加。 - Emmet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接