如何在使用Django admin时将postgres数据库与neo4j实时同步?

如何在使用Django admin时将postgres数据库与neo4j实时同步?,django,database,postgresql,neo4j,django-admin,Django,Database,Postgresql,Neo4j,Django Admin,所以目前我正在做一个Django项目,我有两个不同的数据库。一个是PostgreSQL,第二个是Neo4j。我想要的是两个数据库之间的实时同步。我在Postgres数据库中使用Django管理面板进行crud操作。现在,我还希望neo4j数据库中的每个crud操作更新。但是我不知道怎么做。你可以选择一些方法。我认为您应该将Postgres作为主要的Django数据库,并将Neo4j用作辅助数据库,而不是由Django框架管理。您可以通过使用Neo4j客户机库来实现这一点,该库与graph DB的

所以目前我正在做一个Django项目,我有两个不同的数据库。一个是PostgreSQL,第二个是Neo4j。我想要的是两个数据库之间的实时同步。我在Postgres数据库中使用Django管理面板进行crud操作。现在,我还希望neo4j数据库中的每个crud操作更新。但是我不知道怎么做。

你可以选择一些方法。我认为您应该将Postgres作为主要的Django数据库,并将Neo4j用作辅助数据库,而不是由Django框架管理。您可以通过使用Neo4j客户机库来实现这一点,该库与graph DB的接口类似

为了让Neo4j与Django管理的Postgres保持同步,我认为他们将是你最好的朋友,特别是
post\u save
信号。本质上,只要保存Django模型,该信号就会触发一个函数,您可以编写该函数来使用Neo4j客户端API反映图形数据库中的更改

但是,根据模型的复杂程度,确定哪些字段更改为仅更新这些字段可能会变得很棘手。不久前我也遇到过类似的问题,并使用了此自定义混音(我找不到原始作者,但将其保存在我的笔记中):

从django.forms导入模型到dict
导入日志记录
logger=logging.getLogger(_名称__)
类ModelDiffMixin(对象):
"""
跟踪模型字段值并提供一些有用api的模型混合
了解哪些字段已更改。
"""
定义初始化(self,*args,**kwargs):
super(ModelDiffMixin,self)。\uuuuuu初始值(*args,**kwargs)
self.\u首字母=self.\u dict
@财产
def差异(自身):
d1=自身首字母
d2=自身
d1中k,v的差异=[(k,(v,d2[k])。如果v!=d2[k]],则为items()
返回指令(差异)
@财产
def已更改(自身):
返回布尔值(自身差异)
@财产
def更改_字段(自身):
返回自差异键()
def get_field_diff(自身、字段名称):
"""
如果字段已更改,则返回一个diff for字段,否则不返回。
"""
返回self.diff.get(字段名称,无)
def保存(自身、*args、**kwargs):
"""
保存模型并设置初始状态。
"""
super(ModelDiffMixin,self).save(*args,**kwargs)
self.\u首字母=self.\u dict
@财产
定义(自我):
将模型_返回到_dict(self,fields=[field.name,用于中的字段
self.\u元字段])

如果您将此混入到您的模型中,以便与Neo4j同步,然后在
post_save
信号处理程序中,您可以调用
model.diff
model.changed_字段
,查看需要在Neo4j节点上更新哪些属性,而不是删除整个节点并重新创建它和所有关系。

谢谢您的回答。你的回答完全正确。但在那个时候,当我被问到问题时,我对这些信号并没有广泛的了解。知道信号后,我用所有信号方法解决了问题。