我正在使用SQLAlchemy填充数据库,并且经常需要在处理之前检查数据库中是否存在orm对象。这可能是一个非常规的问题,但是我发现自己经常遇到这种模式:
my_object = session.query(SomeObject).filter(some_fiter).first() if my_object: # Mostly in databases... # Juchee it exists # process else: # It does not exist. :-( my_object = SomeObject() # process
我 梦 of 以求 的是:
if my_object = session.query(someObject).blabla.first(): # if my_object is None this scope is left alone # if my_object is not None I can work with my_object here...
我知道这种语法是错误的,但我想解释一下此示例的含义。任何等效的方式都会让我高兴。
这种模式是否有优雅的python方法?这个问题不仅针对SQLAlchemy,而且针对每个等效方案。
闭上眼睛打“发表您的问题”,并真诚地等待聪明的人和pythonistas追捕我,询问可能不适当的问题 ;-)
您想要执行一个现有查询以提高效率
(ret, ), = Session.query(exists().where(SomeObject.field==value))
Mike Bayer在他的博客文章中对此进行了解释:http : //techspot.zzzeek.org/2008/09/09/selecting- booleans/
如果不希望使用元组,则可以使用标量:
ret = Session.query(exists().where(SomeObject.field==value)).scalar()