25

別のプロセスで作成されたあるプロセスでデータベースにアクセスすることは可能ですか? 私は試した:

アイドル #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()

アイドル #2

import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute("select * from test")

エラー:

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    q = c.execute("select * from test")
sqlite3.OperationalError: no such table: test
4

2 に答える 2

35

いいえ、異なるプロセスから同じメモリ内データベースにアクセスすることはできません。代わりに、への新しい接続により、:memory: 常に新しいデータベースが作成されます。

SQLiteのドキュメントから:

すべての :memory: データベースは他とは異なります。そのため、それぞれ「:memory:」というファイル名を持つ 2 つのデータベース接続を開くと、2 つの独立したメモリ内データベースが作成されます。

これは、同じ接続文字列で複数の接続を作成することは、1 つのデータベースに接続していることを意味するオンディスク データベースとは異なります。

URIを使用すると、 1 つのプロセス内でメモリ内データベースを共有できます。file::memory:?cache=shared

conn = sqlite3.connect('file::memory:?cache=shared', uri=True)

ただし、これは他の別のプロセスからはまだアクセスできません。

于 2013-03-30T16:35:45.887 に答える