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 ответов

7 просмотров

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

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

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

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

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

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

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

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

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

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

анрей С какой целью зашёл?
КТ315
42
я часов 15 назад начал пытаться написать хоть что-то напоминающее ос и у меня есть проблема, которую я пытаюсь решить последние часов 5: есть крч 2 исходника с минимальным код...
Al1to
15
Я не очень много работал с потоками, тут возник вопрос - если будет одновременный доступ к памяти из двух разных потоков, это само по себе приведет к ошибке?
The Bird of Hermes
25
Слушайте, никак не могу заставить работать сортировку в TClientDataSet! Вроде все делаю правильно, создаю индекс, присваиваю его название ClientDataSet1.IndexName, первый раз...
Ivan Burnatov
7
а вот интересный вопрос появляется: допустим у нас есть приложение с системой модулей. Будет ли считаться система модуль+прога ассемблерной программой если: а) Прога на Си, м...
Mixail Frolov
29
я в заголовке имплементировал функцию. В заголовке стоят гарды. Но я все равно получаю multiple definitions. Как это может происходить?
Павλо 🇺🇦
15
как можно вывести первые 100 символов поля content на странице?
Artem
10
Или у тебя COMChecker ловит только свои сообщения, которые он отправил? Не знаю, как у тебя он работает.
КТ315
11
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Как это? А скрин ошибки хоть есть?
Александр (Rouse_) Багель
14
Карта сайта