【发布时间】:2013-08-24 18:17:39
【问题描述】:
参考以下bulk_create查询:
objs = [
Message(
recipient_number=e.mobile,
content=content,
sender=e.contact_owner,
billee=user,
sender_name=sender,
gateway=gateway,
)
for e in query
]
# Send messages to DB
Message.objects.bulk_create(objs)
我的问题:
我必须使用 bulk_create(出于性能原因)。但是我需要在每个创建的对象上调用instance.send(gateway)。
使用批量创建我似乎无法做到这一点,因为 PK 不一定可用于post_save 信号意味着这不起作用....
@receiver(post_save, sender=Message)
def my_post_save_handler(sender, instance, **kwargs):
instance.send(instance.gateway)
post_save.connect(my_post_save_handler, sender=Message)
所以我尝试了其他一些类似的东西......
objs = [
Message(
etc...
).send(gateway)
for e in query
]
这又是行不通的。
这个问题让我有点抓狂,这很简单,那么我有什么选择呢?
我不会使用 create,在插入数百万个对象时必须使用 bulk_create!
谢谢。 :)
【问题讨论】:
-
如果创建数百万个对象的
list不成问题,那么您可以添加一个标志字段来指示消息是否已发送,并在bulk_create之后使用此获取所有对象标记未设置(或字段子集)并执行发送。 -
只是好奇:数以百万计的对象如何适合查询字符串?我的意思是,您是否调整了数据库或在 django 方面进行了一些优化?我想向服务器发送几兆字节的查询会很困难。
-
你不能循环
objs并在批量创建后发送每个吗?
标签: python django django-models