异常处理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # 异常一: 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实现
1 2 3 4 5 6 7 8 9 | # 反射指定表 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://www.learnbo.com/
或关注我们的官方微博微信,还有更多惊喜哦~