2015-01-12 19 views
13

SQLite hỗ trợ một "bộ nhớ cache được chia sẻ" cho :memory: cơ sở dữ liệu khi chúng được mở ra với một URI đặc biệt (theo sqlite.org):SQLAlchemy và SQLite chia sẻ bộ nhớ cache

[T] ông cùng trong bộ nhớ cơ sở dữ liệu có thể được mở bởi hai hoặc nhiều cơ sở dữ liệu kết nối như sau:

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

tôi có thể tận dụng điều này bằng Python 3.4 bằng công URI parameter cho sqlite3.connect():

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

Tuy nhiên, tôi dường như không thể có được điều tương tự làm việc cho SQLAlchemy:

engine = sqlalchemy.create_engine('sqlite:///:memory:?cache=shared') 
engine.connect() 
... 
TypeError: 'cache' is an invalid keyword argument for this function 

Có một số cách để có được SQLAlchemy tận dụng bộ nhớ cache được chia sẻ?

Sửa:
Mở Python 3.4, tôi có thể sử dụng đối số creator-create_engine để giải quyết vấn đề, nhưng vấn đề vẫn còn trên các phiên bản Python khác:

creator = lambda: sqlite3.connect('file::memory:?cache=shared', uri=True) 
engine = sqlalchemy.create_engine('sqlite://', creator=creator) 
engine.connect() 
+4

Tôi không nghĩ rằng bạn có thể làm điều này mà không cần phải chỉnh sửa sqlite3 modul mới e chức năng cho các phiên bản trước đó. – codeape

Trả lời

1

Bạn nên tránh đi qua uri=True về già Các phiên bản Python và sự cố sẽ được khắc phục:

import sqlite3 
import sys 

import sqlalchemy 


DB_URI = 'file::memory:?cache=shared' 
PY2 = sys.version_info.major == 2 
if PY2: 
    params = {} 
else: 
    params = {'uri': True} 

creator = lambda: sqlite3.connect(DB_URI, **params) 

engine = sqlalchemy.create_engine('sqlite:///:memory:', creator=creator) 
engine.connect() 
Các vấn đề liên quan