我有一個 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ā)生,這個新代碼能夠滿足該請求。
添加回答
舉報
0/150
提交
取消