Как установить операторы SQLite PRAGMA с помощью SQLAlchemy - PullRequest
12 голосов
/ 12 марта 2012

Я бы хотел, чтобы SQLAlchemy поместил файл SQLite .journal в память, чтобы повысить производительность.Я пробовал это:

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

и это:

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")

Без удачи.Для длинных транзакций я все еще вижу, что файл .journal создается на диске.Есть ли другой способ установить это?

* примечание У меня нет проблем с этим со встроенным модулем Python sqlite

Ответы [ 3 ]

7 голосов
/ 14 мая 2014

Как насчет использования событий:

from sqlalchemy.engine import Engine
from sqlalchemy import event

@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
    cursor = dbapi_connection.cursor()
    cursor.execute("PRAGMA journal_mode=WAL")
    cursor.close()

См. http://docs.sqlalchemy.org/en/rel_0_9/dialects/sqlite.html#foreign-key-support

5 голосов
/ 12 декабря 2012

В принципе, вы должны быть в состоянии переписать примеры об иностранном ключе, чтобы достичь того, что вы хотите.Взгляните на 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)
1 голос
/ 12 сентября 2014

Два предыдущих решения не сработали, поэтому я нашел другое .

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()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...