Python中使用SQLAlchemy连接Mysql数据库3(事务,编码)

在http://blog.csdn.net/u011573853/article/details/51355113

http://blog.csdn.net/u011573853/article/details/51363780
分别介绍了单表和多表的操作,下面说一下其他问题
1,如何让执行的 SQL 语句增加前缀?如一些执行级别
使用 query 对象的 prefix_with() 方法:

#是查询级别更高
>>>session.query(Stu.name).prefix_with('HIGH_PRIORITY').all()

关于Mysql优化可以参考http://www.cnblogs.com/zhoujinyi/p/3337347.html

2,使用 session.merge() 方法替代 session.add()。merge()会分为两部执行SELECT + UPDATE:

>>> stu = Stu(id=1,name='li')
>>> session.merge(stu)
SELECT stu.id AS stu_id, stu.name AS stu_name 
FROM stu 
WHERE stu.id = %s
2016-05-10 19:32:01,110 INFO sqlalchemy.engine.base.Engine (1,)
<__main__.Stu object at 0xb5ca1b8c>
>>> session.commit()
UPDATE stu SET name=%s WHERE stu.id = %s
2016-05-10 19:32:19,356 INFO sqlalchemy.engine.base.Engine ('li', 1)
2016-05-10 19:32:19,357 INFO sqlalchemy.engine.base.Engine COMMIT
>>> 

3,如何获取字段的长度

>>> Stu.name.property.columns[0].type.length
30
>>> 

4,指定使用 InnoDB,以及使用 UTF-8 编码
可以修改数据库的默认配置。或者在代码里指定的话,可以这样:

>>> class Teach(BaseModel):
...     __table__args__={'mysql_engine':'InnoDB','mysql_charset':'utf8'}
...     __tablename__='teach'
...     id = Column(Integer,primary_key=True)
...     tname=Column(CHAR(20))
... 

5,枷锁,如下加read锁

>>> query=session.query(Stu).with_lockmode('read').get(1)
>>> print query.name
li

或加写锁update

>>> query1=session.query(Stu).with_lockmode('update').get(1)
SELECT stu.id AS stu_id, stu.name AS stu_name 
FROM stu 
WHERE stu.id = %s FOR UPDATE
2016-05-10 20:00:31,104 INFO sqlalchemy.engine.base.Engine (1,)
>>> print query1.name
li
>>> 

刚刚学习的,共同交流

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值