Can two processes access in-memory (:memory:) sqlite database concurrently?
python, sqlite
Solution
No, they cannot ever access the same in-memory database from different processes Instead, a new connection to `:memory:` always creates a new database.
From the SQLite documentation:
Every :memory: database is distinct from every other. So, opening two database connections each with the filename ":memory:" will create two independent in-memory databases.
This is different from an on-disk database, where creating multiple connections with the same connection string means you are connecting to one database.
Within one process it is possible to share an in-memory database if you use the `file::memory:?cache=shared` URI:
conn = sqlite3.connect('file::memory:?cache=shared', uri=True)
but this is still not accessible from other another process.
Problem
Is it possible to access database in one process, created in another? I tried: IDLE #1 ``` import sqlite3 conn = sqlite3.connect(':memory:') c = conn.cursor() c.execute("create table test(testcolumn)") c.execute("insert into test values('helloooo')") conn.commit() conn.close() ``` IDLE #2 ``` import sqlite3 conn = sqlite3.connect(':memory:') c = conn.cursor() c.execute("select * from test") ``` Error: ``` Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> q = c.execute("select * from test") sqlite3.OperationalError: no such table: test ```