翻翻過去那場(chǎng)雪
2023-08-22 15:50:40
我有一個(gè) 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()如果我添加一個(gè)新列并想擴(kuò)展該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方法就會(huì)變得很丑陋。
1 回答

紅顏莎娜
TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
與往常一樣,如果您不想編寫重復(fù)的內(nèi)容,請(qǐng)使用循環(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()
因?yàn)槲覀儾辉賹luster=None/設(shè)置user=None為默認(rèn)值(而是取決于調(diào)用者未指定的內(nèi)容永遠(yuǎn)不會(huì)添加到kwargs),所以我們不再需要阻止添加空值過濾器:唯一的方法是如果用戶實(shí)際要求搜索None;的值,則 null 值將最終出現(xiàn)在參數(shù)列表中。因此,如果該請(qǐng)求發(fā)生,這個(gè)新代碼能夠滿足該請(qǐng)求。
添加回答
舉報(bào)
0/150
提交
取消