2015-01-12 16 views
13

SQLite supporta una "cache condivisa" per :memory: database quando vengono aperti con uno speciale URI (secondo sqlite.org):SQLAlchemy e SQLite cache condivisa

[T] egli stesso in-memory database può essere aperto da due o più connessioni al database come segue:

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

posso approfittare di questo in Python 3.4 utilizzando la URI parameter per sqlite3.connect():

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

Tuttavia, non riesco a ottenere la stessa cosa lavorare per SQLAlchemy:

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

C'è qualche modo per arrivare SQLAlchemy a fare uso della cache condivisa?

Edit:
su Python 3.4, posso utilizzare l'argomento creator-create_engine per risolvere il problema, ma il problema rimane su altre versioni di Python:

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

Non penso che si possa fare questo senza il backporting del nuovo modulo sqlite3 e funzionalità alle versioni precedenti. – codeape

risposta

1

Si dovrebbe evitare di passare uri=True il più vecchio Le versioni Python e il problema saranno risolti:

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() 
Problemi correlati