169 похожих чатов

Всем привет пытаюсь сделать удобный менеджер для обращения к сессии во

фласке, в этом чате все ругают Flask-SQLAlchemy, поэтому решил сделать свое исходя из документации алхимии

код:

class FlaskDB(Flask):
def __init__(self,
import_name: str,
static_url_path: Optional[str] = None,
static_folder: Optional[Union[str, os.PathLike]] = "static",
static_host: Optional[str] = None,
host_matching: bool = False,
subdomain_matching: bool = False,
template_folder: Optional[str] = "templates",
instance_path: Optional[str] = None,
instance_relative_config: bool = False,
root_path: Optional[str] = None,
sqlalchemy_engine: Optional[Engine] = None
):
super(FlaskDB, self).__init__(
import_name,
static_url_path=static_url_path,
static_folder=static_folder,
static_host=static_host,
host_matching=host_matching,
subdomain_matching=subdomain_matching,
template_folder=template_folder,
instance_path=instance_path,
instance_relative_config=instance_relative_config,
root_path=root_path
)
self._engine = sqlalchemy_engine

@contextmanager
def session(self) -> ContextManager[Session]:
session = Session(self._engine)
try:
yield session.begin()
except Exception as e:
self.logger.exception(e)
session.rollback()
else:
session.commit()
finally:
session.close()



обращаться к сессии можно вот так:

with app.session() as session:
session.execute(...)


какие минусы такго подхода? кикие то утечки памяти могут быть? как сделать лучше/правильнее/эффективнее?

поока что заметил единственный минус - current_app не видит .session

реквестирую критику

6 ответов

16 просмотров

что ты будешь делать когда нужно будет две сессии?

hightime- Автор вопроса
Tishka17
что ты будешь делать когда нужно будет две сессии?

у меня пока что ни в ондом приложении не нужно было такого

hightime
у меня пока что ни в ондом приложении не нужно был...

а у меня было. Нагруженные вьюхи ходили в ридонли реплику, а некоторые - в мастер на запись

hightime- Автор вопроса

если отставить в сторону вариант с двумя сессиями, а оставить достаточно простое приложение - этот вариант приемлимый?

https://t.me/ru_flask/95521 а чем тебе аткой вариант не нравится?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта