如何解决django:如何停止创建新的主键保存using =
|| 在Django中,我想将数据从一个db中的相同表复制到另一个db-从\'db01 \'到\'default \'。模式是相同的。>>> a=Household.objects.filter(h_identifier=\'H122000-48\').using(\'db01\')
>>> a[0].pk
>>> u\'451465ea-0137-11e0-879a-70f1a16e0f80\'
>>> a[0].save(using=\'default\')
>>> b=Household.objects.filter(h_identifier=\'H122000-48\').using(\'default\')
>>> b[0].pk
>>> u\'7c2484fe-8641-11e0-b080-00188b4d6b0e\'
它可以工作,但插入\'default \'中的记录的主键与从\'db01 \'中获取的键不同。为了保持与其他表的完整性,pk不得更改。 django docs部分“选择要保存的数据库”建议,由于实例“ a”已具有主键,因此在将新记录插入“ default”时将使用相同的主键。我无法做到这一点。
有谁知道这可以做到吗?提前致谢!!
(这似乎是一个奇怪的设置,但是该应用程序白天在断开连接的上网本上独立运行,并且在所有上网本都停靠的夜晚将数据合并到主数据库中。我可以在mysql中做得很好,但想尽可能使用Django ORM。)
解决方法
我知道这是一段时间前的事,但是今天我遇到了同样的问题-从您使用的密钥来看,您的id字段是django_extensions中的UUIDField类型吗?
这有点漏洞,因为pre_save信号将始终确保替换密钥,而不管是否已经存在。对其进行子类化并替换pre_save函数即可对其进行修复。
class FixedUUIDField(UUIDField):
def pre_save(self,model_instance,add):
value = super(UUIDField,self).pre_save(model_instance,add)
if self.auto and add and not value:
value = unicode(self.create_uuid())
setattr(model_instance,self.attname,value)
return value
,django文档建议使用\'force_insert \':
第二种选择是使用
使用force_insert选项将save()保存到
确保Django执行SQL INSERT:
p =人员(名称= \'Fred \')
保存(使用= \'first \')
p.save(using = \'second \',force_insert = True)这将确保
叫弗雷德的人将有
两者上的相同主键
数据库。如果那个主键是
尝试保存时已在使用中
到第二个数据库,出现错误
将被提出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。