我正在尝试使用 sqlite3 创建多个内存数据库(如果可能)。对于磁盘数据库,我会这样做:
import sqlite3
db1 = sqlite3.connect('/mnt/tmp/db1.db')
db2 = sqlite3.connect('/mnt/tmp/db2.db')
db3 = sqlite3.connect('/mnt/tmp/db3.db')
Run Code Online (Sandbox Code Playgroud)
如果我改为:
db1 = sqlite3.connect("file::memory:?cache=shared")
db2 = sqlite3.connect("file::memory:?cache=shared")
db3 = sqlite3.connect("file::memory:?cache=shared")
Run Code Online (Sandbox Code Playgroud)
这会导致三个独立的内存数据库吗?这似乎创建了到共享内存数据库的三个连接,这不是我想要的。
然后我继续在数据库(磁盘上或内存中)上创建游标:
cur_db1 = db1.cursor()
cur_db2 = db2.cursor()
cur_db3 = db3.cursor()
Run Code Online (Sandbox Code Playgroud)
如果无法使用多个内存数据库,我的最佳选择是使用 RAM 磁盘数据库(如在我的第一个代码块中),然后"PRAGMA journal_mode=MEMORY"在这些连接上执行吗?
如在线文档中所述,使用您正在使用的 URI 格式指定共享缓存将导致同一进程中的所有连接使用相同的数据库。如果您需要三个独立的内存实例,请使用命名的内存数据库file:<DB_Name>?mode=memory&cache=shared作为连接字符串。
从网页...
如果在单个进程中需要两个或多个不同但可共享的内存数据库,则可以将 mode=memory 查询参数与 URI 文件名一起使用以创建命名的内存数据库:
rc = sqlite3_open("file:memdb1?mode=memory&cache=shared", &db);当内存数据库以这种方式命名时,它只会与使用完全相同名称的另一个连接共享其缓存。
| 归档时间: |
|
| 查看次数: |
831 次 |
| 最近记录: |