Skip to content

Instantly share code, notes, and snippets.

@wynemo
Created August 30, 2022 16:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wynemo/81c3e0907c5ae0737f05debac39a1b53 to your computer and use it in GitHub Desktop.
Save wynemo/81c3e0907c5ae0737f05debac39a1b53 to your computer and use it in GitHub Desktop.
sqlalchemy sqlite in memory static pool
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool
import sqlite3
# According to SQLite documentation, both strings below should create in-memory databases:
#url_mode_memory = "sqlite:///file:foo.db?mode=memory&uri=true"
url_mode_memory = "file:foo.db?mode=memory&cache=shared"
sql_url = f'sqlite:///{url_mode_memory}'
create_table_stmt = "CREATE TABLE bar (id INTEGER PRIMARY KEY)"
params = {'uri': True}
creator = lambda: sqlite3.connect(url_mode_memory, **params)
engine_mode = create_engine(sql_url, pool=StaticPool(creator=creator, reset_on_return=False, echo='debug'), echo=True)
local_session = sessionmaker(bind=engine_mode, autoflush=False, autocommit=False)
session = local_session()
session.execute(create_table_stmt)
session.commit()
session.execute("insert into bar (id) values (2)")
session.execute("insert into bar (id) values (3)")
session1 = local_session()
print(session1.execute("select * from bar where id = 2 limit 1").one())
#session1.close()
del session1
session.execute("insert into bar (id) values (4)")
session.execute("insert into bar (id) values (5)")
session.commit()
num_table_mode = session.execute("select * from bar where id=2 limit 1").one()
print(num_table_mode)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment