我的django应用使用update_or_create()
来更新一堆记录。在某些情况下,大量记录中的更新实际上很少,并且知道在这些记录中更新了哪些会更好。是否有可能知道更新的内容(即值已更改的字段)?如果没有,是否有人有解决方法的想法?
这将从shell中调用,因此理想情况下,在update_or_create()
内更改之前提示进行确认会很好,但如果不是这样,那么知道什么变了也会有所帮助。
更新(更多上下文):我想在此提供更多背景信息。这个Django应用程序中的数据通过各种方式(通过网站上的用户,通过管理页面,通过脚本(从shell运行)填充来自csv等的数据)进行更新。上面的问题主要对于从csvs更新数据的shell脚本很重要,因此数据库/触发/信号级别的解决方案在这里可能没有帮助(我猜)。
答案 0 :(得分:1)
这将从shell调用,所以理想情况下它会很好 在更改值之前提示确认
不幸的是,数据库并不是那样的。提供此功能的应用程序负责。并且django不是一个应用程序。但是,您可以使用django编写提供此功能的应用程序。
至于找出对象是否已更新或创建,return value给你的是什么。一个元组,其中第二个值是更新或创建的标志
答案 1 :(得分:0)
这就是我最终做的事情:
for row in reader:
school_obj0, created = Org.objects.get_or_create(school_id = row[0])
if (school_obj0.name != row[1]):
print (school_obj0.name, '==>', row[1])
confirmation = input('proceed? [y/n]: ')
if (confirmation == 'y'):
school_obj1, created = Org.objects.update_or_create(
school_id = row[0], defaults={"name": row[1],})
很高兴知道这种方法的改进(请参阅问题中的更新以及更多背景信息)