фласке, в этом чате все ругают 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
реквестирую критику
что ты будешь делать когда нужно будет две сессии?
у меня пока что ни в ондом приложении не нужно было такого
а у меня было. Нагруженные вьюхи ходили в ридонли реплику, а некоторые - в мастер на запись
если отставить в сторону вариант с двумя сессиями, а оставить достаточно простое приложение - этот вариант приемлимый?
https://t.me/ru_flask/95521 а чем тебе аткой вариант не нравится?
Обсуждают сегодня