我有一个 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条经验 获得超12个赞
与往常一样,如果您不想编写重复的内容,请使用循环:
@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 值将最终出现在参数列表中。因此,如果该请求发生,这个新代码能够满足该请求。
添加回答
举报
0/150
提交
取消