Как использовать 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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