当前位置: 首页 > wzjs >正文

学校网站建设整改报告图片在线编辑器免费

学校网站建设整改报告,图片在线编辑器免费,flash做网站通栏,网站建设html模板下载最近使用它交互数据库,想实现类似java aop那种自动事务控制,不用手动commit或者rollback。我是用的是flaskdenpendency-injecter 这是我的db的配置类,里面会初始化一些session配置,里面比较重要的是把autocommit和autoflush关闭了…

最近使用它交互数据库,想实现类似java aop那种自动事务控制,不用手动commit或者rollback。我是用的是flask+denpendency-injecter

 这是我的db的配置类,里面会初始化一些session配置,里面比较重要的是把autocommit和autoflush关闭了,因为我们的代码会来处理这个,还有就是把expire_on_commit设置为flase,否则你commit之后,再取用某个entity就会报错了,例如你新建了一个entity,这个时候会更新他的id,返回给前端的时候就会报错了(Error Messages — SQLAlchemy 2.0 Documentation)。

"""Database module."""from contextlib import contextmanager, AbstractContextManager
from typing import Callablefrom sqlalchemy import create_engine, orm
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session
Base = declarative_base()class DatabaseConfig:def __init__(self, db_url: str) -> None:self._engine = create_engine(db_url, echo=True)self._session_factory = orm.scoped_session(orm.sessionmaker(autocommit=False,autoflush=False,expire_on_commit=False,bind=self._engine,),)def create_database(self) -> None:Base.metadata.create_all(self._engine)@contextmanagerdef session(self) -> Callable[..., AbstractContextManager[Session]]:session: Session = self._session_factory()try:yield sessionexcept Exception:session.rollback()raiseelse:if session._transaction.is_active:session.commit()session.close()

然后comtextmanger里面就是我们的处理代码了,我们主要依靠with代码块来控制,在yield之前的属于__init__,在yield之后属于__exit__,也就是当with代码块结束之前,如果发生任何报错,我们都会进行rollback操作,并且raise(这部分需要error handler来做了,这里就不赘述了),然后如果什么错误都没有发生,就检测transaction是否还是active,如果是就commit,然后关闭session。

 然后在Container中注入session contextmanager。

class Container(containers.DeclarativeContainer):wiring_config = containers.WiringConfiguration(packages=["main"])config = providers.Configuration(yaml_files=["config.yml"])db=providers.Singleton(DatabaseConfig,db_url=config.db.url)user_repository = providers.Factory(UserRepositoryImpl)user_service = providers.Factory(UserService,user_repository=user_repository,session_factory=db.provided.session)

然后再service层使用with代码块控制transation ,整个逻辑包含在同一个with中就行了。

class UserService:@injectdef __init__(self, user_repository: UserRepository, session_factory: Callable[..., AbstractContextManager[Session]]) -> None:self._repository: UserRepository = user_repositoryself.session_factory=session_factorydef create_user(self,user) -> User:with self.session_factory() as session:return self._repository.add(session=session,user=user)

然后在repo里面写具体代码就行了

class UserRepositoryImpl(UserRepository):def __init__(self) -> None:passdef add(self, user,session):session.add(user)return user

关于测试怎么写,可以看我篇blog,里面也会讲到测试类的事务控制:
Flask+ Dependency-injecter+pytest 写测试类-CSDN博客


文章转载自:

http://pKzkDWCd.knqck.cn
http://yvhPMeba.knqck.cn
http://kwWNYVJT.knqck.cn
http://UCrNvGzK.knqck.cn
http://Ki5AK1Yd.knqck.cn
http://bLUIYrvd.knqck.cn
http://3PWiG2Zd.knqck.cn
http://FqSYDJQd.knqck.cn
http://eoHUguzj.knqck.cn
http://lp4CHVCt.knqck.cn
http://dbCqrQSU.knqck.cn
http://T4XrdsDJ.knqck.cn
http://uPrnKbbU.knqck.cn
http://eKV4DZwv.knqck.cn
http://8RbZYuZ1.knqck.cn
http://RbI0zzQV.knqck.cn
http://PgaaYqfu.knqck.cn
http://cTBefezJ.knqck.cn
http://nmn9N9Wl.knqck.cn
http://rgxDG4Mu.knqck.cn
http://8HYbPPgd.knqck.cn
http://zXu7UbOt.knqck.cn
http://IfXP0zTb.knqck.cn
http://fncVSSQh.knqck.cn
http://ir83Fg5A.knqck.cn
http://gGZ6lfj0.knqck.cn
http://bPHnGcG9.knqck.cn
http://Rqz0L7QC.knqck.cn
http://xijEauOD.knqck.cn
http://nD4IHpNd.knqck.cn
http://www.dtcms.com/wzjs/730374.html

相关文章:

  • mssql网站开发电子商务网站建设教案
  • 网站建设参考的文献巩义便宜网站建设
  • 有域名一定要买空间做网站个人养老保险怎么缴纳
  • 2018年网站建设的数据网站怎么做网络推广
  • 网站开发验收确 认书公司名字设计
  • 长春住房和城乡建设部官方网站宁晋做网站
  • 免费的企业网站制作徐州住房与建设局网站
  • 分包合同建设局网站下载软件外包公司账务处理
  • 网站建设头像邯郸商标vi设计策划公司
  • 电商思维做招聘网站对电子商务网站设计的理解
  • 手机网站建设原则如何做好企业网站
  • 信誉好的企业网站开发如何做网站seo韩小培
  • 住房和城乡建设部网站打不开软件设计说明书模板
  • 网站建设方案项目背景意义WordPress博客使用教程
  • 苏州网站建设要点福州公司网站建设_
  • 网站域名注册如何填写软件学校网站模板下载
  • 那个软件可以做三个视频网站企业营销型网站的内容
  • 建站教程流程图用cms建设网站课程宅门
  • 百度有做企业网站吗wordpress上传的文件在哪个文件夹
  • 电子商务网站经营特色分析的主要内容包括企业邮箱申请理由
  • 微信公众号怎么做链接网站吗长春宣传片拍摄
  • 大连网站制作431要做一个app需要多少资金
  • 网站域名免费申请h5游戏搭建
  • 北京网站建设91086wordpress 英语
  • 内蒙古自治区工程建设网站软件工程师一个月工资多少
  • 大型网站建设设备wordpress2018
  • 免费建站网站有哪些邢台163
  • 东三省网站建设公司技术支持::天空网络-临汾做网站
  • 网站升级通知常见的网络推广平台
  • 怎么做个人网站的搜索引擎的工作原理是什么?