查询表中全部
Role.query.all()
Out[2]: [, ]
In [3]: li =Role.query.all()
In [4]: li
Out[4]: [, ]
In [5]: r =li[0]
In [6]: type(r)
Out[6]: db_demo.Role
In [7]: r.name
Out[7]: u'admin'
-------------------查询单条
In [8]: Role.query.first()
Out[8]: In [9]: r =Role.query.first()
In [10]: r.name
Out[10]: u'admin'
--------------------
#根据主键id获取对象,get要传一个主键ID的值
In [11]: r = Role.query.get(2)
In [12]: r
Out[12]: In [13]: r.name
Out[13]: u'stuff'In [14]:-----------------------------------
#另一种查询方式,这是最原始的方法
In [15]: db.session.query(Role).all()
Out[15]: [, ]
In [16]: db.session.query(Role).get(2)
Out[16]: In [17]: db.session.query(Role).first()
Out[17]: In [18]:-------------------------------------
#按条件查询
In [18]: User.query.filter_by(name="wang")
Out[18]: In [19]: User.query.filter_by(name="wang").all()
Out[19]: []
In [20]: User.query.filter_by(name="wang").first()
Out[20]: In [21]: user = User.query.filter_by(name="wang").first()
In [22]: user.name
Out[22]: u'wang'In [23]: user.email
Out[23]: u'wang@163.com'
--------------------------------
#条件查询,“且”关系
In [24]: User.query.filter_by(name="wang", role_id=1).first()
Out[24]: In [25]: User.query.filter_by(name="wang", role_id=2).first()
In [26]: user = User.query.filter_by(name="wang", role_id=2).first()
In [27]: type(user)
Out[27]: NoneType
In [28]:--------------------------------------------
#filter_by是filter的特殊方法
In [28]: user = User.query.filter(User.name=="wang", User.role_id==1).first
...: ()
In [29]: user
Out[29]: In [30]: user.name
Out[30]: u'wang'
-----------------------------------------
#引入类这是"或"关系
In [31]: from sqlalchemy importor_
In [32]: User.query.filter(or_(User.name=="wang", User.email.endswith("163.com")
...: )).all()
Out[32]: [, ]
In [33]: li = User.query.filter(or_(User.name=="wang", User.email.endswith("163.
...: com"))).all()
In [34]: li[0].name
Out[34]: u'wang'In [35]: li[1].name
Out[35]: u'zhou'In [36]:--------------------------------------------
#offset偏移 跳过几条#User.query.offset().limit().order_by().all()
In [36]: User.query.offset(2).all()
Out[36]: [, ]
In [37]: li = User.query.offset(2).all()
In [38]: li[0].name
Out[38]: u'chen'In [39]: li[1].name
Out[39]: u'zhou'In [40]:-------------------------------
#后面必须跟上all()否则取不出来
In [42]: li = User.query.offset(1).limit(2).all()
In [43]: li
Out[43]: [, ]
In [44]: li[0].name
Out[44]: u'zhang'In [45]: li[1].name
Out[45]: u'chen'In [46]:-------------------------------
#排序
In [50]: User.query.order_by("-id").all()
Out[50]:
[,,,]
In [51]:#官方版本,降序desc(),升序asc()
In [51]: li =User.query.order_by(User.id.desc()).all()
In [52]: li
Out[52]:
[,,,]
In [53]: li[0].name
Out[53]: u'zhou'In [54]: li[3].name
Out[54]: u'wang'In [55]:----------------------
#分组查询,func里包含聚合方法
In [55]: from sqlalchemy importfunc
In [56]: db.session.query(User.role_id, func.count(User.role_id)).group_by(User.role_id)
Out[56]: In [57]: db.session.query(User.role_id, func.count(User.role_id)).group_by(User.role_id).all()
Out[57]: [(1L, 2L), (2L, 2L)]
In [58]:-------------------------
#关联查询,反向查询
In [61]: ro = Role.query.get(1)
In [62]: type(ro)
Out[62]: db_demo.Role
In [63]: ro.users
Out[63]: [, ]
In [64]: ro.users[0].name
Out[64]: u'wang'In [65]: ro.users[1].name
Out[65]: u'zhou'In [66]:--------------------------
#正向查询
In [67]: user
Out[67]: In [68]: user.role_id
Out[68]: 1LIn [69]: Role.query.get(user.role_id)
Out[69]:
#这里可以方便的查询user的role信息,backref值的神奇作用
In [70]: user.role
Out[70]: In [71]: user.role.name
Out[71]: u'admin'In [72]:-----------------------------
#更新#1.原始方法
In [9]: user = User.query.get(1)
In [10]: user.name
Out[10]: 'python'In [11]: user.name = 'itcast'In [12]: db.session.add(user)
In [13]: db.session.commit()-----------------------
#简便方法
In [14]: User.query.filter_by(name="zhou").update({"name": "python", "emai
...: l":"python@itast.cn"})
Out[14]: 1LIn [15]: db.session.commit()
In [16]:------------------------
#删除
In [16]: user = User.query.get(3)
In [17]: db.session.delete(user)
In [18]: db.session.commit()
In [19]: