Python 从标准sqlite更改为postgres数据库
我正在Django项目中尝试从标准sqlite数据库更改为postgresql。以下是我迄今为止所做的工作: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',
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吗?