Как использовать SQLite в памяти, чтобы вести себя так же, как в обычном файле?Python

Программы на Python
Anonymous
Как использовать SQLite в памяти, чтобы вести себя так же, как в обычном файле?

Сообщение Anonymous »

Итак, у меня есть приложение FastAPI с SQLAlchemy в качестве ORM. У нас есть служба, которая использует базу данных SQLite для получения информации из некоторых служб и имеет для нас «кэш».
Теперь это не огромный файл базы данных, его размер составляет всего 1 ГБ, и он не должен слишком сильно увеличиваться в размере.

Сейчас мы создаем файл базы данных при создании службы

Код: Выделить всё

#database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base, sessionmaker
from sqlalchemy_utils import create_database, database_exists

Base = declarative_base()
DB_SEMAPHORE = threading.Semaphore(1)

def get_engine():
engine = create_engine("sqlite://cache.db", connect_args={"check_same_thread"=False})

if not database_exists(engine.url):
create_database(engile.url)

return engine

def get_session():
engine = get_engine()
return sessionmaker(bind=engine, autocommit=False, autoflush=False)

def create_tables():
engine = get_engine()
Base.metadata.create_all(bind=engine)
А потом вызываем типа

Код: Выделить всё

from database import Base, get_session

Session = get_session()

class User(Base):
name: Mapped[str]

@classmethod
def example(cls):
with Session() as session:
session.query()
Так все работает нормально. Но затем, когда я пытаюсь использовать "sqlite://" для использования БД в памяти, возникают всевозможные проблемы.
Я следовал этому примеру: Документация SQLAlchemy

Использование StaticPool, но теперь сеанс выдает ошибку, и без этого он делает это при каждом новом соединении, создавая новую БД.
Но есть ли способ простой работы, как обычный файл БД, но в памяти? Чтобы вести себя так же, как и раньше, не требуя слишком больших изменений?
Я также попробовал установить URL-адрес базы данных на

Код: Выделить всё

file:memdb1?mode=memory&cache=shared
Но при попытке получить сеанс произошла такая же ошибка

Подробнее здесь: https://stackoverflow.com/questions/798 ... ormal-file

Вернуться в «Python»