def get_row_by_fields(model, **kwargs):
"""Get a unique row by arbitrary fields.
Parameters
----------
kwargs : dict of field names and values
model : BaseModel
Returns
-------
row
"""
field_name = []
field_value = []
try:
for name, value in kwargs.iteritems():
field_name.append(getattr(model, name)) # Make sure column exists
field_value.append(value)
except AssertionError as e:
raise
try:
if len(field_name) == 1:
row = model.get(field_name[0] == field_value[0])
elif len(field_name) == 2:
row = model.get(field_name[1] == field_value[1])
elif len(field_name) == 3:
row = model.get(field_name[2] == field_value[2])
elif len(field_name) == 4:
row = model.get(field_name[3] == field_value[3])
elif len(field_name) == 5:
row = model.get(field_name[4] == field_value[4])
else:
raise ValueError('Too many arguments for row lookup')
except DoesNotExist:
raise
else:
return row
评论列表
文章目录