在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
>>>
刚刚学习的,共同交流