django.db.utils.IntegrityError: null value in column "old_column" violates not-null constraint
django.db.utils.IntegrityError: null value in column "old_column" violates not-null constraint
我在测试中遇到一个非常奇怪的错误:
django.db.utils.IntegrityError: null value in column "old_column" violates not-null constraint
E DETAIL: Failing row contains (68, , f, , null, f).
但是“old_column”在我的数据库中已经不存在了。
几小时前就在那里,但此列已重命名为其他名称。
如果我使用 psql mydb
或 manage.py dbshell
检查数据库,然后使用 \d appname_tablename
检查数据库,那么我清楚地看到“old_column”不再存在.
我不知道为什么数据库 (PostgreSQL) 认为此列仍然存在。
如果您使用“reuse-db”选项,那么 pytest 会保留测试数据库。
如果您使用 postgres,那么您可以像这样列出可用的数据库:
psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+----------+----------+---------+---------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
test_mydb | vagrant | UTF8 | C.UTF-8 | C.UTF-8 |
mydb | vagrant | UTF8 | C.UTF-8 | C.UTF-8 |
(5 rows)
如果您连接到“mydb”(通过 psql
或 manage.py dbshell
),那么这是一个与您的测试使用的数据库不同的数据库。
使用--create-db强制重新创建数据库。
我在测试中遇到一个非常奇怪的错误:
django.db.utils.IntegrityError: null value in column "old_column" violates not-null constraint
E DETAIL: Failing row contains (68, , f, , null, f).
但是“old_column”在我的数据库中已经不存在了。
几小时前就在那里,但此列已重命名为其他名称。
如果我使用 psql mydb
或 manage.py dbshell
检查数据库,然后使用 \d appname_tablename
检查数据库,那么我清楚地看到“old_column”不再存在.
我不知道为什么数据库 (PostgreSQL) 认为此列仍然存在。
如果您使用“reuse-db”选项,那么 pytest 会保留测试数据库。
如果您使用 postgres,那么您可以像这样列出可用的数据库:
psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+----------+----------+---------+---------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
test_mydb | vagrant | UTF8 | C.UTF-8 | C.UTF-8 |
mydb | vagrant | UTF8 | C.UTF-8 | C.UTF-8 |
(5 rows)
如果您连接到“mydb”(通过 psql
或 manage.py dbshell
),那么这是一个与您的测试使用的数据库不同的数据库。
使用--create-db强制重新创建数据库。