Python 根据sqlalchemy模型的唯一约束检查数据帧记录

Python 根据sqlalchemy模型的唯一约束检查数据帧记录,python,pandas,dataframe,sqlalchemy,Python,Pandas,Dataframe,Sqlalchemy,我有一个SQLAlchemy模型和一个pandas数据框架,其中包含的记录很少,应该加载到SQLAlchemy模型表示的表中。但在加载之前,我需要检查数据帧中的所有行是否满足“UniqueConstraint” 我的模型和数据框架如下: 型号: 数据帧: 在这种情况下,checker函数应返回false,因为数据帧中的第3条和第6条记录违反了uniqueconstraint(同一航班不能同时为两条不同的航线安排)。有关于如何做的提示/解决方案吗?IIUC重复的 df.duplicated('fl

我有一个SQLAlchemy模型和一个pandas数据框架,其中包含的记录很少,应该加载到SQLAlchemy模型表示的表中。但在加载之前,我需要检查数据帧中的所有行是否满足“UniqueConstraint”

我的模型和数据框架如下:

型号:

数据帧:


在这种情况下,checker函数应返回false,因为数据帧中的第3条和第6条记录违反了uniqueconstraint(同一航班不能同时为两条不同的航线安排)。有关于如何做的提示/解决方案吗?

IIUC
重复的

df.duplicated('flight_id',keep=False)
Out[473]: 
0    False
1    False
2     True
3    False
4    False
5     True
dtype: bool
或者使用
groupby

df.groupby('flight_id').transform('nunique').gt(1).any(1)
Out[482]: 
0    False
1    False
2     True
3    False
4    False
5     True
dtype: bool
我认为需要为每个指定列检查重复项,至少检查一个
True

print (df.duplicated(['flight_id', 'schedule']).any())
True
详细信息

print (df.duplicated(['flight_id', 'schedule']))
0    False
1    False
2    False
3    False
4    False
5     True
dtype: bool
print (df.duplicated(['flight_id', 'schedule'], keep=False))
0    False
1    False
2     True
3    False
4    False
5     True
dtype: bool
如果需要筛选有问题的行,请使用参数
keep=False
返回所有重复:

print (df[df.duplicated(['flight_id', 'schedule'], keep=False)])
   flight_id from_location to_location schedule
2          4     Fairbanks     Glasgow   12-Jan
5          4  Johannesburg      Venice   12-Jan
详细信息

print (df.duplicated(['flight_id', 'schedule']))
0    False
1    False
2    False
3    False
4    False
5     True
dtype: bool
print (df.duplicated(['flight_id', 'schedule'], keep=False))
0    False
1    False
2     True
3    False
4    False
5     True
dtype: bool

@是的,我发布了它,所以快速删除评论:)谢谢你的回答。但是,您应该考虑sqlalchemy模型。如果我的模型约束发生变化,我不应该总是去改变我的数据帧检查器。您的代码肯定会工作,但只适用于我在问题中描述的示例场景。@Kingz-您认为
UniqueConstraint中的EXTRACT列有效吗('flight_id'、'schedule'、
,并将其用作
复制的
函数的参数?@Kingz…您的注释是问题中包含的一个非常重要的项目。此外,不应不断更改表约束,因为它可能使其他行无效。约束、键、触发器等应在数据库架构删除期间设置一次在数据填充之前对阶段进行签名。