python - 由于外键,将 pandas 数据帧插入表时出错
问题描述
我正在执行一个非常简单的操作,即从一个处理它的表中获取值并将其加载到 Postgres 中的一个空表中。
第一个表具有以下结构:
CREATE TABLE public.entities
(
canonical character varying(255) NOT NULL DEFAULT ''::character varying,
db_id character varying(255) NOT NULL,
code character varying(255),
description character varying(4096),
level character varying(255),
class character varying(255) NOT NULL,
model character varying(255) NOT NULL DEFAULT 'test'::character varying,
variants text[],
CONSTRAINT entities_pkey PRIMARY KEY (db_id, canonical, class, model)
)
我试图加载已处理数据的第二个表具有以下结构
CREATE TABLE public.entities_variants
(
entitymodel_canonical character varying(255) NOT NULL,
entitymodel_db_id character varying(255) NOT NULL,
entitymodel_model character varying(255) NOT NULL,
entitymodel_class character varying(255) NOT NULL,
variants character varying(255),
CONSTRAINT fk8g9miq5xcx1jtp85lysrkjhm FOREIGN KEY (entitymodel_canonical, entitymodel_db_id, entitymodel_model, entitymodel_class)
REFERENCES public.entities (db_id, canonical, class, model) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
现在,当我尝试插入(按行或整个数据框)时,我收到完整性错误:
IntegrityError:在表“entities_variants”上插入或更新违反了外键约束“fk8g9miq5xcx1jtp85lysrkjhm” 详细信息:键(entitymodel_canonical,entitymodel_db_id,entitymodel_model,entitymodel_class)=(Timothy Dress,92002,ofirmev,名称)在表“entities”中不存在。
我已经确认该数据原样存在于第一个表中。
解决方案
您定义外键的列顺序与您引用列的顺序不匹配。
你有entitymodel_canonical
引用db_id
,entitymodel_db_id
引用canonical
等。
我认为你的约束声明应该是:
CONSTRAINT fk8g9miq5xcx1jtp85lysrkjhm FOREIGN KEY (entitymodel_db_id ,entitymodel_canonical, entitymodel_class, entitymodel_model)
REFERENCES public.entities (db_id, canonical, class, model) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
推荐阅读
- python - 如何在 Python 中生成许多 32x32 灰度图像的平均图像?
- polymer-3.x - 如何缩短 Polymer 3.0 的构建时间
- wpf - 使用 MEF 和 ExportAttribute 加载视图时出现问题
- angular - 为什么在单元测试ngrx-effect时出现此错误
- javascript - 检查多个输入是否为数字类型
- mysql - 我无法通过 Mysql 查询在 Wordpress 管理面板中更改库存状态和管理库存选项
- javascript - 基于布尔值启用/禁用 Vue 转换
- javascript - 如何以角度重新加载 index.html 的 head 标签内的脚本?
- http - Go http 客户端不会自动拆分正文
- ssl - Cert-Manager 证书更新过程 - 它是如何执行的?