sqlalchemy的優雅 不定字段 不定長查詢

2021-10-08 09:43:52 字數 1447 閱讀 4828

假設 tbuser 為乙個表模型,session 為與資料庫的會話

乙個普通的查詢大概是這個樣:

session.query(tbuser)

.filter

(tbuser.name==

"xiaokeai"

)

這是為已知要查 tbuser 內的 name 欄位而設計的查詢,有這麼乙個需求,查某乙個字段裡面包含有字母 y 的條目,出現了對未知欄位的描述。

__dict__魔術方法:返回類的屬性與屬性值 item,型別為字典。在 sqlalchemy 的模型中每乙個正常的字段屬性對應值均為字段物件,等待在被 query 查詢時例項化。

# 乙個模型的 __dict__ 參考

)

利用 __dict__來實現不特定字段

col_name =

"***"

# 查詢某個字段包含有 xx 的 , 這個字段可能是任何乙個字段

session.query(tbuser)

.filter

(tbuser.__dict__[col_name]

.like(

"%y%"))

# 亦或者查詢某個字段值等於 xx

session.query(tbuser)

.filter

(tbuser.__dict__[col_name]

=="xx"

)

session.query(tbuser).filter()這是一條普通的過濾查詢,實際上在 filter 內的所有條件都是乙個物件,用乙個 list 裝所有的查詢條件物件。

filters =

[ tbuser.name.like(

"y")

,# 加乙個包含y條件

tbuser.xx==

"test"

# 加乙個值等於test的條件

]# 可以直接對過濾條件解包

session.query(tbuser)

.filter

(*filters)

and_, or_ 的增加示例

# 查詢同時滿足有filters內條件的

session.query(tblsymp)

.filter

(and_(

*filters),)

# 查詢同時滿足filters條件的 或者滿足 filters2 條件的

session.query(tbuser)

.filter

(or_(and_(

*filters)

,*filters2)

)

我是庸了個白,你的點讚將是我更新的最大動力。

tornado框架SQLAlchemy的操作

在用到python的一些框架裡,需要進行前後端資料互動,其中資料庫的連線是必不可少的,之前自己使用sqlalchemy在進行資料庫連線時遇到了很多問題,以及一些流程不是很清楚。所以花了點時間進行了一下流程梳理。1.首先建立乙個空py檔案 這裡命名為connect.py 匯入包 from sqlalc...

sqlalchemy的初步認識

sqlalchemy是python的乙個包,用來運算元據庫.其實sqlalchemy自己並不能連線資料庫,它也是通過pymysql或者其他資料庫連線工具連線的.alchemy,煉丹術,煉金術,魔法 通過sqlalchemy可以使不同的 通過不同的工具連線不同的資料庫.就像是煉丹爐一樣,一切操作都在這...

Sqlalchemy中的事務

from flask import flask from flask sqlalchemy import sqlalchemy class user db.model id db.column db.integer,primary key true name db.column db.string ...