基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础入门_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=‘[email protected]‘, 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之事务回滚与反射还原对象?的主要内容,如果未能解决你的问题,请参考以下文章
基础入门_Python-模块和包.深入SQLAlchemy之SQLAlchemy ORM重构表?
基础入门_Python-模块和包.深入Celery之节点管理/任务调度/任务追踪?
基础入门_Python-模块和包.深入Celery之使用队列以及优先级提高响应?
基础入门_Python-模块和包.深入SQLAlchemy之事务回滚与反射还原对象?