我想用最优雅的Python方法实现: 尝试在数据库中的某个筛选器上查找对象。只有在没有结果的情况下,才尝试使用另一个过滤器查找对象。如果没有返回结果,则对象不存在,因此请插入一个新实例。在
我在想:
try:
obj = session.query(model).filter_by(field_a).one()
except NoObjFound:
try:
obj = session.query(model).filter_by(field_b).one()
except NoObjFound:
insert_into_db(brand_new_obj)
else:
update_the_obj(obj)
我不确定这个块是正确的还是处理我要完成的任务的最佳方法。在
我建议你这样做:
这将确保正确的事情以正确的顺序发生,比嵌套的
try
块更具可读性,并且可以轻松地扩展以添加更多的filter
这是不正确的。假设您想在找到独立于哪个过滤器找到它的对象之后
update_the_obj(obj)
,那么末尾的else
子句对内部过滤器是隐藏的。在你可以试试:
相关问题 更多 >
编程相关推荐