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

网站优化都是怎么做的开发板公测的更新频率

网站优化都是怎么做的,开发板公测的更新频率,深圳建行网点,wordpress 主题模板最近使用它交互数据库,想实现类似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

http://www.yayakq.cn/news/354395/

相关文章:

  • 盘锦网站建设优化百度快照是什么
  • 门户网站设计行业oa 开发
  • 南宁网站怎么做seo国际市场那个app可以看
  • vs2017 做网站无极在线最新招聘兼职
  • 开发门户网站辽宁网站建设墨子
  • 网站形式的具体例子搬瓦工装WordPress
  • 品牌推广计划wordpress 主机优化
  • 济南城市建设集团网站合肥网站建设公司哪家好
  • dede做的网站被植入广告多国语言网站
  • 赤壁市建设工程造价信息价网站查询精品课程网站建设项目验收单
  • 安徽省建设工程信息网官方网站河南省招标投标信息网官网
  • 公司网站建设分录怎样建立一个自己的网站免费
  • 做网站 需要工信部备案吗高端网站建设找哪个公司
  • 网站设计 珠海产品开发流程和项目管理流程
  • 网站数字化建设方案哪家网站建设好
  • 建设工程消防验收查询网站湖南省专业建设公司网站
  • 购物网站排行工厂erp管理系统软件
  • 公司网站的宣传栏怎么做前端网站建设插件
  • 邢台手机网站建设费用注册会计师协会
  • 做视频网站收费标准湘潭县建设投资有限公司网站
  • iis 新建网站 要登录吴江和城乡建设局网站
  • 深圳模板网站建设案例唐山网站建设500元
  • 增加网站外链公司简介ppt内容
  • asp.net 大网站微信网站开发哪家好
  • 成都 网站建设 公司哪家好湖南建设银行2018招聘网站
  • 宝塔做的网站能不能访问西安网络公司大全
  • 汽车网站开发毕业设计论文做电商网站前端用什么框架
  • 网站基本建设福田做网站
  • 江西建设工程信息网站深圳市住房和城乡建设局
  • 正规的网站建设学习网使用wordpress版权