Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从标准sqlite更改为postgres数据库_Python_Django_Postgresql_Sqlite - Fatal编程技术网

Python 从标准sqlite更改为postgres数据库

Python 从标准sqlite更改为postgres数据库,python,django,postgresql,sqlite,Python,Django,Postgresql,Sqlite,我正在Django项目中尝试从标准sqlite数据库更改为postgresql。以下是我迄今为止所做的工作: 已安装postgresql 创建了数据库和具有写入权限的用户 更改settings.py中的数据库设置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'workout', 'USER': 'admin',

我正在Django项目中尝试从标准sqlite数据库更改为postgresql。以下是我迄今为止所做的工作:

  • 已安装postgresql
  • 创建了数据库和具有写入权限的用户
  • 更改settings.py中的数据库设置:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'workout',
            'USER': 'admin',
            'PASSWORD': 'admin',
            'HOST': 'localhost',
            'PORT': '5432',
        }
    }
    
  • 然后,当我尝试迁移时,会发生这种情况(长错误跟踪警告):

    我猜这就是造成问题的模型。我的问题显然是,为什么?为该模型的
    id
    字段指定了多个默认值是什么意思?我怎么能让它们只有一个呢

    编辑:

    按照Daniel Roseman的要求,失败的迁移0003_auto_20171215_1153.py:

    # -*- coding: utf-8 -*-
    # Generated by Django 1.11.5 on 2017-12-15 11:53
    from __future__ import unicode_literals
    
    from django.db import migrations, models
    
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('workoutcal', '0002_auto_20171215_1102'),
        ]
    
        operations = [
            migrations.AddField(
                model_name='user',
                name='id',
                field=models.AutoField(auto_created=True, default=1, primary_key=True, serialize=False, verbose_name='ID'),
                preserve_default=False,
            ),
            migrations.AlterField(
                model_name='user',
                name='email',
                field=models.EmailField(error_messages={'unique': 'A user with that email address already exists.'}, help_text='Required. 150 characters of fewer. Must be a valid email address.', max_length=150, unique=True, verbose_name='email address'),
            ),
        ]
    
    编辑2:

    我听从了塞扎的指示。到达最后一步并尝试迁移时,发生此错误

    (workout) Sahands-MBP:workout sahandzarrinkoub$ python manage.py migrate workoutcal
    Traceback (most recent call last):
      File "manage.py", line 22, in <module>
        execute_from_command_line(sys.argv)
      File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
        utility.execute()
      File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute
        output = self.handle(*args, **options)
      File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 86, in handle
        executor.loader.check_consistent_history(connection)
      File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history
        connection.alias,
    django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency workoutcal.0001_initial on database 'default'.
    
    (训练)Sahands MBP:训练sahandzarrinkoub$python manage.py迁移训练
    回溯(最近一次呼叫最后一次):
    文件“manage.py”,第22行,在
    从命令行(sys.argv)执行命令
    文件“/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site packages/Django/core/management/__init____;.py”,第364行,从命令行执行
    utility.execute()
    文件“/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site packages/Django/core/management/__init___;.py”,第356行,在execute中
    self.fetch_命令(子命令)。从_argv(self.argv)运行_
    文件“/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site packages/Django/core/management/base.py”,第283行,在运行中,来自
    self.execute(*args,**cmd_选项)
    文件“/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site packages/Django/core/management/base.py”,第330行,执行
    输出=self.handle(*args,**选项)
    文件“/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site packages/Django/core/management/commands/migrate.py”,第86行,在handle中
    执行器。加载程序。检查\u一致性\u历史记录(连接)
    文件“/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site packages/Django/db/migrations/loader.py”,第298行,检查历史记录是否一致
    connection.alias,
    django.db.migrations.exceptions.InconsistentMigrationHistory:Migration admin.0001_initial在数据库“default”上的依赖项workoutcal.0001_initial之前应用。
    
    另一个迁移是什么?如何完全删除迁移历史记录


    编辑3:使用
    删除表'tablename'级联删除数据库中的每个表之后
    ,删除WorkUtCal/migrations中的所有文件,并再次运行
    makemigrations
    migrate
    ,这一切都起了作用。

    问题出在以下几行:

    field=models.AutoField(auto_created=True, default=1, primary_key=True, serialize=False, verbose_name='ID'),
    删除应用程序
    workutcal
    中的目录
    migrations

    DELETE FROM django_migrations WHERE app = 'workoutcal';
    
    rm -rf workoutcal/migrations/*
    
    然后生成新迁移:

    python manage.py makemigrations workoutcal
    
    这将创建新的初始迁移。之后,命令:

    python manage.py migrate workoutcal
    
    应无任何问题地填充数据库

    编辑:

    迁移
    admin.0001\u initial
    取决于
    workoutcal.0001\u initial
    。我无法解释这种依赖性。您可以使用django命令行工具还原
    admin
    的迁移:

    python manage.py migrate admin zero
    
    python manage.py migrate workoutcal
    python manage.py migrate admin
    
    使用选项
    zero
    可以告诉django恢复所有迁移,并在运行初始迁移之前建立状态。您可以指定迁移次数,而不是
    zero
    。但是,在特定情况下,您需要使用
    zero
    恢复到初始状态

    然后运行
    workoutcal
    的迁移,然后运行
    admin
    的迁移:

    python manage.py migrate admin zero
    
    python manage.py migrate workoutcal
    python manage.py migrate admin
    

    问题出现在以下行中:

    field=models.AutoField(auto_created=True, default=1, primary_key=True, serialize=False, verbose_name='ID'),
    删除应用程序
    workutcal
    中的目录
    migrations

    DELETE FROM django_migrations WHERE app = 'workoutcal';
    
    rm -rf workoutcal/migrations/*
    
    然后生成新迁移:

    python manage.py makemigrations workoutcal
    
    这将创建新的初始迁移。之后,命令:

    python manage.py migrate workoutcal
    
    应无任何问题地填充数据库

    编辑:

    迁移
    admin.0001\u initial
    取决于
    workoutcal.0001\u initial
    。我无法解释这种依赖性。您可以使用django命令行工具还原
    admin
    的迁移:

    python manage.py migrate admin zero
    
    python manage.py migrate workoutcal
    python manage.py migrate admin
    
    使用选项
    zero
    可以告诉django恢复所有迁移,并在运行初始迁移之前建立状态。您可以指定迁移次数,而不是
    zero
    。但是,在特定情况下,您需要使用
    zero
    恢复到初始状态

    然后运行
    workoutcal
    的迁移,然后运行
    admin
    的迁移:

    python manage.py migrate admin zero
    
    python manage.py migrate workoutcal
    python manage.py migrate admin
    

    换了。同样的问题仍然存在。显示您的型号
    workoutcal\u用户
    它已经在问题中了。我想不出它可能是任何其他模型,这是我唯一定义的模型。我如何删除为它指定的默认值?您应该显示失败迁移的代码workoutcal.0003\u auto\u 20171215\u 1153。已更改它。同样的问题仍然存在。显示您的型号
    workoutcal\u用户
    它已经在问题中了。我想不出它可能是任何其他模型,这是我唯一定义的模型。我如何删除为它指定的默认值?您应该显示失败迁移的代码workoutcal.0003_auto_20171215_1153。谢谢@cezar。不幸的是,当我尝试你的解决方案时出现了一个错误。你能看一下编辑2吗?谢谢你@cezar。不幸的是,当我尝试你的解决方案时出现了一个错误。你能看一下编辑2吗?