Flask——資料的查詢

codelife發表於2019-08-24

在控制器檔案中匯入需要的模型類

from app.admin.model.User import User

Flask-SQLAlchemy 在 Model 類上提供了 query 屬性。當訪問它時,會得到一個新的所有記錄的查詢物件。在使用 all() 或者 first() 發起查詢之前可以使用方法 filter() 來過濾記錄。如果想要用主鍵查詢的話,也可以使用 get()。

user = User.query.filter_by(username='admin').first()

查詢一條不存在的資料返回None

使用更復雜的表示式查詢一些使用者:

User.query.filter(User.username.endswith('@example.com')).all()

按某種規則對使用者排序:

User.query.order_by(User.username).all()

限制返回使用者的數量:

User.query.limit(1).all()

用主鍵查詢使用者:

User.query.get(1)

獲取數量

User.query.count()
在檢視中查詢

當編寫 Flask 檢視函式,對於不存在的條目返回一個 404 錯誤是非常方便的。因為這是一個很常見的問題,Flask-SQLAlchemy 為了解決這個問題提供了一個幫助函式。可以使用 get_or_404() 來代替 get(),使用 first_or_404() 來代替 first()。這樣會丟擲一個 404 錯誤,而不是返回 None:

@admin.route('/user/<username>')
def show_user(username):
    user = User.query.filter_by(username=username).first_or_404()
    return render_template('show_user.html', user=user)

模糊查詢

User.query.filter(User.name.like('xxx%'))

in查詢

User.query.filter(User.id.in_([5,6]))

not in查詢

User.query.filter(~User.id.in_([1,5,6]))

and查詢

# 需要先匯入模組
from sqlchemy import and_

User.query.filter(and_(User.name == 'Python',User.id==2))
#或者
User.query.filter(User.name == 'Python', User.id == 2)

or查詢


from sqlalchemy import or_

User.query.filter(or_(User.name == 'Python', User.name == 'Flask'))

原生查詢

from sqlalchemy import text

User.query.filter(text('id>=:value1 and id <:value2')).params(value1=2,value2=5)

完整sql語句查詢

User.query.from_statement(text("select * from tags where id=:value")).params(value=1)

原生查詢資料數量

db.session.execute("SELECT COUNT(*) FROM table").scalar()

group by統計資料

from sqlalchemy import func

db.session.query(Model).with_entities(Model.field, func.count(Model.field)).group_by(field).all()

返回json格式資料

首先定義處理模型物件的函式

def to_json(obj):
    _dict = vars(obj)
    for i in list(_dict.keys()):
    if i.startswith('_'):
    _dict.pop(i)
    return _dict

使用json模組,json模組的dumps方法可以傳入default引數自定義序列化處理方法

from flask import jsonify
import json

user = User.get(1)
data = json.dumps(user, default=to_json)
return jsonify(data)#返回json物件
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章