微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

django.db.utils.IntegrityError:“old_column”列中的空值违反了非空约束

如何解决django.db.utils.IntegrityError:“old_column”列中的空值违反了非空约束

我在测试中遇到一个非常奇怪的错误

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 mydbmanage.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”(通过 psqlmanage.py dbshell),那么这与您的测试使用的数据库不同。

使用 --create-db 强制重新创建数据库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。