Python Django-检查两个模型的主键是否匹配

Python Django-检查两个模型的主键是否匹配,python,django,Python,Django,我有两个模型sett,data_parsed,data_parsed有一个sett的外键 解析的数据模型应该有相同数量的行,但它们可能不同步 为了避免这种情况发生。我基本上要做这两个步骤: 检查sett.objects.all.count==data\u parsed.objects.all.count 这对于快速检查非常有效,而且在一百万行中需要几秒钟的时间 如果它们不相同,我会检查所有sett模型的pk,排除已经在数据解析中找到的pk 基本上,这是选择sett中的所有对象,排除已解析数据中的

我有两个模型sett,data_parsed,data_parsed有一个sett的外键

解析的数据模型应该有相同数量的行,但它们可能不同步

为了避免这种情况发生。我基本上要做这两个步骤:

检查sett.objects.all.count==data\u parsed.objects.all.count

这对于快速检查非常有效,而且在一百万行中需要几秒钟的时间

如果它们不相同,我会检查所有sett模型的pk,排除已经在数据解析中找到的pk

基本上,这是选择sett中的所有对象,排除已解析数据中的所有setid。此方法有效,但对于100万行,大约需要4小时


有没有更快的方法可以做到这一点?

如果我没有弄错,您正试图通过设置外键在另一个模型中保留已处理对象的列表

每个sett对象只解析一个数据对象,因此不需要多对一关系。您可以使用,然后检查哪个对象的字段为空


使用外键时,您可以尝试使用反向查询进行过滤,但这是在对象级别,因此我怀疑这是否有效。

如果我没有弄错,则您正试图通过设置外键在另一个模型中保留已处理对象的列表

每个sett对象只解析一个数据对象,因此不需要多对一关系。您可以使用,然后检查哪个对象的字段为空


使用外键,您可以尝试使用反向查询进行筛选,但这是在对象级别,因此我怀疑这是否有效。

查找没有使用反向关系解析数据的集合:

setts.objects.filter(data_parsed_setid__isnull=True)

查找未使用反向关系解析数据的集合:

setts.objects.filter(data_parsed_setid__isnull=True)

添加一个创建/更新的时间戳,看看自上次检查以来发生了什么变化?类似于从sett s中选择s,其中s.setid不在SELECT d.setid FROM data_parsed;?有没有办法在您的ORM中进行自定义查询?谢谢您的帮助!我尽量不向模型中添加更多的数据。另外,我现在还试图避免使用自定义查询。如果sett和data_解析的行数必须相同,那么一对一关系如何?因此,根据答案,要查找没有数据解析关系的sett对象,您只需使用backref=None筛选sett对象。添加一个创建/更新的时间戳,看看自上次检查以来发生了什么变化?类似于从sett s中选择s,其中s.setid不在从数据解析的SELECT d.setid中;?有没有办法在您的ORM中进行自定义查询?谢谢您的帮助!我尽量不向模型中添加更多的数据。另外,我现在还试图避免使用自定义查询。如果sett和data_解析的行数必须相同,那么一对一关系如何?所以,根据答案,要找到没有数据解析关系的sett对象,只需使用backref=None筛选sett对象。
setts.objects.filter(data_parsed_setid__isnull=True)