【发布时间】:2018-06-29 03:17:22
【问题描述】:
我有这两个相关的 django 模型
class Item(models.Model):
item_nbr = models.IntegerField(primary_key=True)
created = models.DateTimeField(auto_now_add=True)
item_nbr_desc = models.CharField(max_length=155)
class SetItem(models.Model):
set_id = models.CharField(primary_key=True, default='', max_length=12)
set_nbr = models.IntegerField()
items = models.ForeignKey(Item)
我正在运行一个脚本(定期)从另一个数据库中读取Item 表,并使用该数据框来更新 django 数据库项表。我正在使用 django orm 框架来制作与 django 数据库的接口
script.py
from app.models import Item
item_table = pd.read_sql(__)
item_table = some_transformations(item_table.copy())
#I remove all the Items that will be updated
Item.objects.filter(item_nbr__in=item_table.item_nbr.unique()).delete()
item_table_records = item_table.to_dict('records')
item_instances = []
fields = item_table.keys()
for record in item_table_records:
kwargs = {
field: record[field] for field in fields
}
item_instances.append(Item(**kwargs))
Item.objects.bulk_create(item_instances) # update the new rows
问题是setItem 表在我每次删除相关项目时都会被删除(因为on_delete=models.CASCADE 行为)。我想更新items 而不是删除setItem 相关行,并且我不想更改on_delete 默认行为,因为只有在这个脚本中我需要上传整个表,我可能想要在另一个上下文中删除Item,我希望级联行为有效。我能做些什么?是否有批量更新功能可以对表执行非破坏性更新?
【问题讨论】:
标签: python mysql sql django orm