如何在sqlite3中创建多个“:memory:”数据库

时间:2019-10-31 18:44:25

标签: python-2.7 sqlite

我正在尝试使用sqlite3创建多个内存数据库(如果可能)。 对于磁盘数据库,我可以这样做:

import sqlite3 

db1 = sqlite3.connect('/mnt/tmp/db1.db')
db2 = sqlite3.connect('/mnt/tmp/db2.db')
db3 = sqlite3.connect('/mnt/tmp/db3.db')

如果我改为这样做:

db1 = sqlite3.connect("file::memory:?cache=shared")
db2 = sqlite3.connect("file::memory:?cache=shared")
db3 = sqlite3.connect("file::memory:?cache=shared")

这会导致三个独立的内存数据库吗?这似乎创建了到共享内存数据库的三个连接,这不是我想要的。

然后我使用以下方法在数据库(磁盘或内存中)上创建游标:

cur_db1 = db1.cursor()
cur_db2 = db2.cursor()
cur_db3 = db3.cursor()

如果不可能有多个内存数据库,我的最佳选择是使用RAM磁盘数据库(如我的第一个代码块中所示),然后在这些连接上执行"PRAGMA journal_mode=MEMORY"吗?

1 个答案:

答案 0 :(得分:2)

online docs中所述,使用与您正在使用的URI格式指定共享缓存将导致同一进程中的所有连接使用同一数据库。如果要使用三个单独的内存实例,请使用":memory:"作为连接字符串。

或在同一网页中也有描述...

  

如果在单个过程中需要两个或更多不同但可共享的内存数据库,则可以将mode = memory查询参数与URI文件名一起使用,以创建一个命名的内存数据库:

     

rc = sqlite3_open("file:memdb1?mode=memory&cache=shared", &db);

     

以这种方式命名内存数据库时,它将仅与使用完全相同名称的另一个连接共享其缓存。