有几点还没有写.
- 分页.
- 创建表.
下面是分页的内容
from models import *
# 测试分页功能
def query_paginate():
emps = sess.query(Emp).order_by(Emp.empno.asc()).limit(3).offset(3).all()
for item in emps:
print(item)
'''
output:
{'empno': 7566, 'ename': 'JONES', 'job': 'MANAGER', 'deptno': 20, 'sal': Decimal('2975.00'), 'comm': None}
{'empno': 7654, 'ename': 'MARTIN', 'job': 'SALESMAN', 'deptno': 30, 'sal': Decimal('1250.00'), 'comm': Decimal('1400.00')}
{'empno': 7698, 'ename': 'BLAKE', 'job': 'MANAGER', 'deptno': 30, 'sal': Decimal('2850.00'), 'comm': None}
'''
# 测试分页功能2, 如果把 offset和limit调换顺序呢?其实也没问题好像。 目前我没有深究
def query_paginate2():
emps = sess.query(Emp).order_by(Emp.empno.asc()).offset(3).limit(3).all()
for item in emps:
print(item)
'''
output:
{'empno': 7566, 'ename': 'JONES', 'job': 'MANAGER', 'deptno': 20, 'sal': Decimal('2975.00'), 'comm': None}
{'empno': 7654, 'ename': 'MARTIN', 'job': 'SALESMAN', 'deptno': 30, 'sal': Decimal('1250.00'), 'comm': Decimal('1400.00')}
{'empno': 7698, 'ename': 'BLAKE', 'job': 'MANAGER', 'deptno': 30, 'sal': Decimal('2850.00'), 'comm': None}
'''
'''
note:
请大家注意, sqlalchemy和flask-sqlalchemy是两个不同的包。
sqlalchemy是原生的,核心。
flask-sqlalchemy是根据sqlalchemy, 为flask量身定制开发的。 flask是一个web轻量级框架。
请注意sqlalchemy和flask-sqlalchemy的界限。
paginate函数是flask-sqlalchemy的方法, 不属于原生的sqlalchemy, 鉴于时间和精力的关系, 我不在这里写了。
'''
if __name__ == '__main__':
query_paginate2()
如果要创建表的话,使用Base.metadata.create_all(engine)
, 具体请参考
db_util.py里面的方法。
sqlalchemy的教程到这里就暂时结束了。
这篇教程了里缺少的东西有很多, 我想了一下, 主要缺的有, 关系, 比如relation的写法, flask-sqlalchemy的写法(flask-sqlachemy是结合web框架的),限于精力和时间,以及主要是个人懒惰,没有啥动力,就不想往下写了。
特别强调一下, relation,也就是关系,主键外键等等约束,如果你很感兴趣的话, 去官方文档查看。 可以使用编程手动实现这些主键外键约束,关系等等。 个人感觉没有必要太在这上面花时间。
据说,生产环境不怎么使用外键和关系, 我也不知道为啥。
SQLAlchemy官方网站
http://docs.sqlalchemy.org/en/latest/contents.html
教程全部代码github地址
https://github.com/notfresh/sqlalchemy_demo