在控制器檔案中匯入需要的模型類
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 協議》,轉載必須註明作者和本文連結