$python manage.py test project.core.testsnosetests --verbosity 1 project.core.tests --rednoseCreating test database for alias 'default'...X.-----------------------------------------------------------------------------1) ERROR: Tests that a user with a sha1 hashed password is change to newer hash method Traceback (most recent call last): crowddeals/core/tests.py line 7 in setUp self.user1 = User.objects.create_user('user1','[email protected]') env/lib/python2.7/site-packages/django/contrib/auth/models.py line 160 in create_user user.save(using=self._db) env/lib/python2.7/site-packages/django/db/models/base.py line 477 in save force_update=force_update,update_fIElds=update_fIElds) env/lib/python2.7/site-packages/django/db/models/base.py line 572 in save_base result = manager._insert([self],fIElds=fIElds,return_ID=update_pk,using=using,raw=raw) env/lib/python2.7/site-packages/django/db/models/manager.py line 203 in _insert return insert_query(self.model,obJs,fIElds,**kwargs) env/lib/python2.7/site-packages/django/db/models/query.py line 1588 in insert_query return query.get_compiler(using=using).execute_sql(return_ID) env/lib/python2.7/site-packages/django/db/models/sql/compiler.py line 911 in execute_sql cursor.execute(sql,params) env/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py line 52 in execute return self.cursor.execute(query,args) IntegrityError: duplicate key value violates unique constraint "auth_user_pkey" DETAIL: Key (ID)=(1) already exists.
默认数据库正在运行,可以添加用户.测试数据库上的测试失败了.
查看测试数据库,我看到所有表的主键的自动递增序列具有错误的起始值,它将默认数据库中最后使用的值作为测试数据库上的起始值.
对于默认数据库,User.ID使用自动增量序列.
CREATE SEQUENCE auth_user_ID_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;
并为测试数据库创建
CREATE SEQUENCE auth_user_ID_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 2 CACHE 1;
这显然是错误的,这也发生在其他表上,作为权限.
CREATE SEQUENCE auth_permission_ID_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 191 CACHE 1;
我无法猜测为什么会发生这种情况,它必须从1开始在新的测试数据库上创建序列.
如果我将数据库引擎后端更改为sqlite3,则不会发生异常.这恰好发生在postgresql中.
我怎样才能解决这个问题?所以我的测试可以重新开始工作了.
解决方法 如果您没有在每次测试中重新创建数据库,那么您必须自己重置序列.另外,我认为在使用db工具运行测试后检查db时发现了您发布的序列定义.在这种情况下,我认为您的数据库工具正在向您展示sql,以便按原样创建序列:在使用它之后.
它在sqlite上没有发生的事实与默认情况下使用内存数据库有关.因此,它在每次测试运行中都会重新创建.
总结以上是内存溢出为你收集整理的Django为Postgresql创建了测试数据库,其序列起始值不正确全部内容,希望文章能够帮你解决Django为Postgresql创建了测试数据库,其序列起始值不正确所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)