Python - 传递 SQLAlchemy 模型或 id 号更好吗?再次查询?
Python - Is it better to pass an SQLAlchemy model, or an id no. to query again?
示例代码:
def primary_function(object_id):
some_object = SomeObject.query.get(object_id)
# Do stuff here
secondary_function(unknown_parameter)
def secondary_function(unknown_parameter):
# Do more stuff here
两个函数都需要访问 some_object
。将 unknown_parameter
作为对象本身是否更有效,还是将其作为 object_id
,然后再次调用 SomeObject.query.get(object_id)
会更好?
我在文档中没有看到任何关于此的信息(尽管我想我可能漏掉了一些东西),我在这里找到的所有其他问题都是针对其他语言的,并且答案不一。
通常,当您使用 ORM 时,您会执行第二种,但作为一种方法:
class Foo(Model):
def bar(self, param):
... work on self ...
如果您传入 object_id
,这对批量操作很有用,但请考虑传入查询集是否更适合您的用例:
def bar1(object_id, param):
queryset = session.query(Foo).where(id=object_id)
bar2(queryset, param)
def bar2(queryset, param):
queryset.update(...)
这样,当更新单行或查询集具有更复杂的 WHERE 子句时,您可以使用相同的方法 (bar2
)。
示例代码:
def primary_function(object_id):
some_object = SomeObject.query.get(object_id)
# Do stuff here
secondary_function(unknown_parameter)
def secondary_function(unknown_parameter):
# Do more stuff here
两个函数都需要访问 some_object
。将 unknown_parameter
作为对象本身是否更有效,还是将其作为 object_id
,然后再次调用 SomeObject.query.get(object_id)
会更好?
我在文档中没有看到任何关于此的信息(尽管我想我可能漏掉了一些东西),我在这里找到的所有其他问题都是针对其他语言的,并且答案不一。
通常,当您使用 ORM 时,您会执行第二种,但作为一种方法:
class Foo(Model):
def bar(self, param):
... work on self ...
如果您传入 object_id
,这对批量操作很有用,但请考虑传入查询集是否更适合您的用例:
def bar1(object_id, param):
queryset = session.query(Foo).where(id=object_id)
bar2(queryset, param)
def bar2(queryset, param):
queryset.update(...)
这样,当更新单行或查询集具有更复杂的 WHERE 子句时,您可以使用相同的方法 (bar2
)。