zoukankan      html  css  js  c++  java
  • python的with语句

    from sqlalchemy import create_engine
    from sqlalchemy.orm import scoped_session, sessionmaker
    from setting import EREBUS_DB_CONNECT_STRING
    from contextlib import contextmanager
    
    # 创建数据库引擎,echo为True,会打印所有的sql语句
    engine = create_engine(EREBUS_DB_CONNECT_STRING, echo=True, pool_size=250, max_overflow=50, pool_recycle=300)# 创建会话类
    db_session = scoped_session(sessionmaker(autocommit=False,
                                             autoflush=False,
                                             bind=engine,
                                             expire_on_commit=True))
    
    
    # 创建会话对象
    @contextmanager
    def session(): #生成器函数
        try:
            session = db_session()
            session.expire_on_commit = False
            yield session
        except:
            session.rollback()
        finally:
            session.close()

    装饰器@contextmanager 只是省略了 __enter__() / __exit__() 的编写,但并不负责实现资源的“获取”和“清理”工作;“获取”操作需要定义在 yield 语句之前,“清理”操作需要定义 yield 语句之后,这样 with 语句在执行 __enter__() / __exit__() 方法时会执行这些语句以获取/释放资源,即生成器函数中需要实现必要的逻辑控制,包括资源访问出现错误时抛出适当的异常

    参考:

    1、https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/index.html

    2、https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001478651770626de401ff1c0d94f379774cabd842222ff000

  • 相关阅读:
    计算机中的那些缩写词
    Linux 下dns的搭建
    html中的定位
    编程基础之流程控制
    linux中kvm的安装及快照管理
    zabbix 中监控windows 的typepref中的值
    详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
    rhel7 单用户修改root密码
    Linux vim编辑器使用详解
    Linux下用ftp更新web内容!
  • 原文地址:https://www.cnblogs.com/shengulong/p/7519770.html
Copyright © 2011-2022 走看看