第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有條件地向 SQLAlchemy 查詢添加多個過濾器,而無需重復代碼

有條件地向 SQLAlchemy 查詢添加多個過濾器,而無需重復代碼

翻翻過去那場雪 2023-08-22 15:50:40
我有一個 SQLAlchemy 模型:class Ticket(db.Model): __tablename__ = 'ticket' id = db.Column(INTEGER(unsigned=True), primary_key=True, nullable=False, autoincrement=True) cluster = db.Column(db.VARCHAR(128)) @classmethod def get(cls, cluster=None):     query = db.session.query(Ticket)     if cluster is not None:         query = query.filter(Ticket.cluster==cluster)     return query.one()如果我添加一個新列并想擴展該get方法,我必須添加if xxx is not None如下所示的列: @classmethod def get(cls, cluster=None, user=None):     query = db.session.query(Ticket)     if cluster is not None:         query = query.filter(Ticket.cluster==cluster)     if user is not None:         query = query.filter(Ticket.user==user)     return query.one()有什么辦法可以提高效率嗎?如果我有太多列,該get方法就會變得很丑陋。
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

與往常一樣,如果您不想編寫重復的內容,請使用循環(huán):


@classmethod

def get(cls, **kwargs):

? ? query = db.session.query(Ticket)

? ? for k, v in kwargs.items():

? ? ? ? query = query.filter(getattr(table, k) == v)

? ? return query.one()

因為我們不再將cluster=None/設置user=None為默認值(而是取決于調用者未指定的內容永遠不會添加到kwargs),所以我們不再需要阻止添加空值過濾器:唯一的方法是如果用戶實際要求搜索None;的值,則 null 值將最終出現在參數列表中。因此,如果該請求發(fā)生,這個新代碼能夠滿足該請求。


查看完整回答
反對 回復 2023-08-22
  • 1 回答
  • 0 關注
  • 1624 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號