Postgresql忽略批量导入的默认值



我有一个postgres DB运行在一个docker容器。我正试图批量导入一个满是邮政编码的csv。这是一个Django项目

因为它们都指的是同一个州——"NSW"。CSV中不存在该列

我的模型(这是django)对State列有如下定义:

state = models.CharField(max_length=200, default="NSW", null=False, blank=False)

但是当我尝试执行时,我得到以下错误:

postgres=# COPY datacollector_localities(name, postcode) FROM '/postcodes-nsw.csv' DELIMITER ',' CSV HEADER;
ERROR:  null value in column "state" of relation "datacollector_localities" violates not-null constraint
DETAIL:  Failing row contains (5, Condobolin, 2877, null).
CONTEXT:  COPY datacollector_localities, line 2: "Condobolin,2877"

我假设离开状态的column_names列表将使postgres使用默认值。我做错了什么?

如文档中所述,在创建模型实例时应用默认值。

auto_now类似,这些不使用DB触发器处理,因为它取决于所使用的DB类型。

我不知道CSV导入是如何工作的(你没有分享代码),但你需要做一些像:

instances = []
for row in my_csv:
instances.append(MyModel(**row.data))
MyModel.objects.bulk_create(instances)

假设行数据是一个以列标签为键的字典。

最新更新