在使用mariadb后端在Django中批量创建时临时禁用外键约束检查

2024-06-17 11:58:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在django中以编程方式生成大量虚拟数据,Model2FK引用了两个模型,Model1Model2,它们有超过10万条记录。我一直在使用bulk_create来生成Model2FK数据,但是生成10000个批量大小为1000的对象需要大约120秒。这不够有效,无法在合理的时间内生成数据(目前生成所需的所有数据需要一周以上的时间)。你知道吗

我怀疑这很慢,因为django或mariadb正在对每个创建的对象的外键执行检查,这会导致很长的查找时间,因为数据库会查找这两个引用以确保它们存在。因为我是自己生成数据的,所以我知道密钥存在,希望跳过这一步。我曾尝试在mariadb中使用SET FOREIGN_KEY_CHECKS=0;来禁用外键检查,但它似乎只针对那个mariadb会话进行更新,因此没有反映在我的django脚本中。此外,如果可能的话,我希望能够完全在我的django脚本中管理它,这样我就不需要每次需要运行大型数据创建任务时都连接到数据库。你知道吗

我不想修改我的Model定义而没有这些外键约束,我只想在生成我知道不会通过这些检查的数据时禁用它们。这在django可能吗?你知道吗


Tags: 数据对象django模型脚本数据库编程方式