2012-03-12 13 views
11

Me gustaría que SQLAlchemy ponga el archivo SQLite .journal en la memoria para acelerar el rendimiento. He intentado esto:Cómo establecer declaraciones SQLite PRAGMA con SQLAlchemy

sqlite_db_engine = create_engine('sqlite:///%s' % str(dbname), connect_args = {'PRAGMA  journal_mode':'MEMORY', 'PRAGMA synchronous':'OFF', 'PRAGMA temp_store':'MEMORY', 'PRAGMA cache_size':'5000000'}) 

db = sqlite_db_engine.connect() 

y esto:

sqlite_db_engine = create_engine('sqlite:///%s' % str(dbname)) 

db = sqlite_db_engine.connect() 
db.execute("PRAGMA journal_mode = MEMORY") 
db.execute("PRAGMA synchronous = OFF") 
db.execute("PRAGMA temp_store = MEMORY") 
db.execute("PRAGMA cache_size = 500000") 

sin suerte. Para transacciones largas, aún puedo ver el archivo .journal que se está creando en el disco. ¿Hay alguna otra manera de establecer esto?

* Nota tengo ningún problema en hacer con el módulo Python SQLite incorporados

+0

También traté de añadir un oyente como en este tema: http://stackoverflow.com/questions/2614984/sqlite-sqlalchemy-how-to-enforce-foreign-keys – tomc

+0

Tengo el error 'DBAPIError: (TypeError) 'PRAGMA cache_size' es un argumento de palabra clave no válido para esta función None None' cuando intento utilizar el código. Este mismo error que tienes? – Nilesh

+0

No obtengo ningún error, el código se ejecuta correctamente pero aparentemente no hace nada. – tomc

Respuesta

5

Básicamente, usted debería ser capaz de reescribir los ejemplos sobre ForeignKey para lograr lo que quiere. Echar un vistazo a https://stackoverflow.com/a/7831210/1890086

engine = create_engine(database_url) 

def _fk_pragma_on_connect(dbapi_con, con_record): 
    dbapi_con.execute('PRAGMA journal_mode = MEMORY') 
    # ... 

from sqlalchemy import event 
event.listen(engine, 'connect', _fk_pragma_on_connect) 
0

dos soluciones anteriores no funcionan, por lo que he encontrado the another one.

from sqlalchemy.interfaces import PoolListener 
class MyListener(PoolListener): 
    def connect(self, dbapi_con, con_record): 
     dbapi_con.execute('pragma journal_mode=OFF') 
     dbapi_con.execute('PRAGMA synchronous=OFF') 
     dbapi_con.execute('PRAGMA cache_size=100000') 

engine = create_engine('sqlite:///' + basefile,echo=False, listeners= [MyListener()]) 
+1

En versiones recientes esto dará: SADeprecationWarning: El argumento 'listeners' para Pool (y create_engine()) está en desuso. Use event.listen() – jpoppe

Cuestiones relacionadas