我的DJango应用程序中有以下型号:
class Ratings(models.Model):
field1 = models.ForeignKey(Table1)
field2 = models.ForeignKey(Table2)
field3 = models.ForeignKey(Table3)
field4 = models.ForeignKey(Table4)
field5 = models.ForeignKey(Table5)
class Values(models.Model):
grade = models.ForeignKey(Grade)
rating = models.ForeignKey(Ratings, related_name='ratings')
value = models.TextField(blank=True, null=True)
我使用以下代码创建Rating表的实例:
rating_obj = Ratings(
field1_id=id1,
field2_id=id2,
field3_id=id3,
field4_id=id4,
field5_id=id5
)
rating_obj.save()
上述方法有效,但速度太慢。我必须创建这个模型的大约30个实例。我无法使用 bulk_create ,因为我需要rating_obj的引用来创建值对象。我已经尝试使用raw_sql
进行插入,但无济于事
有人可以建议一个更好的方法来实现同样的目标
附: Table1,Table2..etc在其主键中已经有db_index = True。
答案 0 :(得分:0)
使用threading
进行多线程怎么样?这将同时创建Ratings对象。
import threading
def createRatings(id1, id2, id3, id4, id5):
return Ratings(
field1_id=id1,
field2_id=id2,
field3_id=id3,
field4_id=id4,
field5_id=id5
).save()
for ids in idsList:
threading.Thread(
target=createRatings,
args=(
ids[0],
ids[1],
ids[2],
ids[3],
ids[4],
ids[5],
)
).start()
答案 1 :(得分:0)
@Cole我无法回答你的问题。对我有用的是:
@transaction.atomic
在函数的顶部。它禁用操作之间的任何保存点,并且延迟提交到函数结束。如果您在视图中有大量操作,这可以提高性能