首页 > 代码库 > 基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
异常处理:
# 异常一: AttributeError,对象属性不存在 with engine.connect() as conn: trans = conn.begin() s = select([users]) try: r = conn.execute(s) for record in r: print record.Password except AttributeError, e: print ‘found errors: {0}‘.format(e) trans.rollback() # 异常二: IntegrityError,唯一约束错误 with engine.connect() as conn: trans = conn.begin() ins = users.insert().values( id=2, customer_number=2, username=‘limanman‘, email_address=‘xmdevops@vip.qq.com‘, phone=‘11011011011‘, password=‘2‘, created_on=‘2016-11-06‘, updated_on=‘2016-11-06‘, ) from sqlalchemy.exc import IntegrityError try: res = conn.execute(ins) print ‘values: {0}‘.format(res.inserted_primary_key) except IntegrityError, e: print ‘found errors: {0}‘.format(e) trans.rollback()
说明: SQLAlchemy在运行中可能会抛出各种异常,但是最常见是AttributeError异常和IntegrityError异常,其实所有的异常类都可以在sqlalchemy.exc下面找到,通常我们会通过事务来防止异常数据的写入,当抛出异常时我们通过事务trans.rollback()回滚到trans = conn.begin()定义的事务开始位置.
反射技术:
1. 反射技术就是自动通过连接字符串加载已经存在的数据库,支持反射表/视图/索引/外键等,如反射还原表对象可以通过设置Table的autoload=True和autoload_with=engine实现
# 反射指定表 users = Table(‘users‘, metadata, autoload=True, autoload_with=engine) print metadata.tables.keys() print type(users), users, users.primary_key, dir(users) # 反射整个库 metadata.reflect(bind=engine) print metadata.tables.keys() users = metadata.tables[‘users‘] print type(users), users, users.primary_key, dir(users)
说明: 如上演示了常用于对已存在数据库/表/视图/索引自动加载,可通过Table(<tablename>, metadata, autoload=True, autoload_with=engine)来反射还原指定表对象,通过metadata.reflect(bind=engine)反射整个库,对已存在的数据库想切换至SQLAlchemy Core/ORM操作时是非常方便的,而且还可以后期动态添加索引,外键等
本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1870104
基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。