1. 程式人生 > 其它 >學習筆記:flask_sqllalchemy中 orm 相關查詢操作

學習筆記:flask_sqllalchemy中 orm 相關查詢操作

優缺點:

優點:

只需要面向物件程式設計,不需要使用sql語言
實現資料模型和資料庫的解藕,及不用關心是什麼資料庫,更改簡單配置即可更換資料庫。

缺點

有部分效能損耗

基本操作

插入

 1 # 建立模型類物件
 2 ro1 = Role(name='admin')
 3 # 執行add新增命令
 4 db.session.add(ro1)
 5 # 如果是多條資料(多個用於提交的模型類物件)可使用add_all提交列表資料
 6 # db.session.add_all([us1,us2,us3,us4,us5,us6,us7,us8,us9,us10])
 7 # 提交到資料庫(未提交資料庫不發生改變)
8 db.session.commit() 9 ———————————————— 10 版權宣告:本文為CSDN博主「jlb1024」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。 11 原文連結:https://blog.csdn.net/jlb1024/article/details/81515155

查詢

  • filter_by精確查詢
  • 1 # 查詢name是wang的所有物件
    2 User.query.filter_by(name='wang').all()
  • frist返回第一個物件 
  • 1 # 查詢name是wang的第一個物件
    2 User.query.filter_by(name='
    wang').first()
  • all返回查詢到所有物件(返回一個查詢集合)
  • 1 # 查詢name是wang的所有物件
    2 User.query.filter_by(name='wang').all()

    filter模糊查詢

 

1 # 查詢name結尾是‘g’的所有資料
2 User.query.filter(User.name.endswith('g')).all()
  • get查詢主鍵
  • 1 # 查詢主鍵ID為 1 的物件
    2 User.query.get(1)

 

  • 邏輯非查詢
  • 1 # 返回name不是‘wang’的所有使用者
    2 User.query.filter(User.name!='
    wang').all()
  • 邏輯與,需要匯入and
  • 1 # 查詢所有name是wang的並且emali以‘163.com’結尾的使用者
    2 from sqlalchemy import and_
    3 User.query.filter(and_(User.name!='wang',User.email.endswith('163.com'))).all()
  • 邏輯或,需要匯入or_
  • 1 # 查詢所有name是wang或者emali以‘163.com’結尾的使用者
    2 from sqlalchemy import or_
    3 User.query.filter(or_(User.name!='wang',User.email.endswith('163.com'))).all()
  • not_取反操作
  • 1 # name是chen的都不要,及取name是‘chen’的反
    2 from sqlalchemy import not_
    3 User.query.filter(not_(User.name=='chen')).all()

     

  • 一般查詢操作總彙(包括其他部分查詢)

  •  1  """
     2     查詢所有使用者資料
     3         User.query.all()
     4     查詢有多少個使用者
     5         User.query.count()
     6     查詢第1個使用者
     7         User.query.first()
     8     查詢id為4的使用者[3種方式]
     9         User.query.get(4)
    10         User.query.filter(User.id == 4).first()
    11         User.query.filter_by(id=4).first()
    12     查詢名字結尾字元為g的所有資料[開始/包含]
    13         User.query.filter(User.name.endswith('g')).all()
    14         User.query.filter(User.name.startswith('g')).all()
    15         User.query.filter(User.name.contains('g')).all()
    16     查詢名字不等於wang的所有資料[2種方式]
    17         User.query.filter(not_(Usme == 'wang')).all()
    18         User.query.filter(User.name != 'er.nawang').all()
    19     查詢名字和郵箱都以 li 開頭的所有資料[2種方式]
    20         User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))).all()
    21         User.query.filter(User.name.startswith("li"), User.email.startswith("li")).all()
    22     查詢password是 `123456` 或者 `email` 以 `itheima.com` 結尾的所有資料
    23         [User: 1 wang, User: 5 tang, User: 8 liu]
    24     查詢id為 [1, 3, 5, 7, 9] 的使用者列表
    25         User.query.filter(User.id.in_([1,3,5,7,9])).all()
    26     查詢name為liu的角色資料
    27         user = User.query.filter(User.name == "liu").first()
    28         Role.query.get(user.role_id)
    29     查詢所有使用者資料,並以郵箱排序
    30         User.query.order_by(User.email).all()
    31         User.query.order_by(User.email.desc()).all()  倒序
    32     每頁3個,查詢第2頁的資料
    33         User.query.paginate(2, 3, False).items
    34     """

     

 

————————————————

原文連結:https://blog.csdn.net/jlb1024/article/details/81515155