如果对象已经存在(基于提供的参数),我想从数据库中获取它;如果不存在,我想创建它。
Django的^{
我现在是这样写出来的:
def get_or_create_instrument(session, serial_number):
instrument = session.query(Instrument).filter_by(serial_number=serial_number).first()
if instrument:
return instrument
else:
instrument = Instrument(serial_number)
session.add(instrument)
return instrument
遵循@WoLpH的解决方案,这是对我有效的代码(简单版本):
有了这个,我可以让你或你创建我的模型的任何对象。
假设我的模型对象是:
要获取或创建对象,我会编写:
我一直在处理这个问题,最后得到了一个相当可靠的解决方案:
我只是在所有细节上写了一个fairly expansive blog post,但是有一些关于我为什么使用这个的想法。
它解包成一个元组,告诉您对象是否存在。这在您的工作流程中通常很有用。
该函数提供了使用
@classmethod
修饰的creator函数(以及特定的属性)的能力。当有多个进程连接到数据存储时,该解决方案可防止竞争条件。
编辑:我已将
session.commit()
更改为session.flush()
,如this blog post中所述。注意,这些决定是特定于所使用的数据存储的(在本例中是Postgres)。编辑2:我在函数中使用{}作为默认值进行了更新,因为这是典型的Python gotcha。谢谢你the comment,奈杰尔!如果你对此感到好奇,请查看this StackOverflow question和this blog post。
基本上就是这样,没有捷径可走。
当然,你们可以概括为:
相关问题 更多 >
编程相关推荐