深入SQLAlchemy之事务回滚与反射还原对象

异常处理:

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()

    = select([users])

    try:

        = 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/

或关注我们的官方微博微信,还有更多惊喜哦~

 

转载于:https://my.oschina.net/learnbo/blog/844329

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值