Python 尝试在Django2中迁移时出错

Python 尝试在Django2中迁移时出错,python,django,Python,Django,我有个问题(至少我认为是这样)。我对这一切都是新手,所以如果我问了一些愚蠢的问题,我向你道歉。 我有一些网站,这是正常工作。当我尝试进行迁移时(python manage.py makemigrations),一切正常,我得到了关于我有多少个新模型的消息,等等。但是,当我在迁移之后运行时,我得到了以下输出: Operations to perform: Apply all migrations: admin, auth, comments, contenttypes, news, sessi

我有个问题(至少我认为是这样)。我对这一切都是新手,所以如果我问了一些愚蠢的问题,我向你道歉。 我有一些网站,这是正常工作。当我尝试进行迁移时(
python manage.py makemigrations
),一切正常,我得到了关于我有多少个新模型的消息,等等。但是,当我在迁移之后运行时,我得到了以下输出:

Operations to perform:
  Apply all migrations: admin, auth, comments, contenttypes, news, sessions
  Running migrations:
   Applying comments.0003_auto_20180816_2158...Traceback (most recent call last):
   File "../venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
  return self.cursor.execute(sql, params)
  psycopg2.ProgrammingError: syntax error at or near "WITH ORDINALITY"
  LINE 6:                     FROM unnest(c.conkey) WITH ORDINALITY co...
                                              ^


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
   execute_from_command_line(sys.argv)
  File ".../venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
 File ".../venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File ".../venv/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File 
  ".../venv/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
   output = self.handle(*args, **options)
  File 
".../venv/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped
     res = handle_func(*args, **kwargs)
   File ".../venv/lib/python3.6/site- 
 packages/django/core/management/commands/migrate.py", line 203, in handle
fake_initial=fake_initial,
   File 


 ".../venv/lib/python3.6/site- 
packages/django/db/backends/base/schema.py", line 531, in _alter_field
fk_names = self._constraint_names(model, [old_field.column], 
foreign_key=True)
  File ".../venv/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 1027, in _constraint_names
constraints = self.connection.introspection.get_constraints(cursor, model._meta.db_table)
 File ".../venv/lib/python3.6/site- 
packages/django/db/backends/postgresql/introspection.py", line 158, in get_constraints
""", ["public", table_name])
 File ".../venv/lib/python3.6/site-packages/django/db/backends/utils.py", 
 line 100, in execute
   return super().execute(sql, params)
 File 


".../venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute
   return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File ".../venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
  File ".../venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
  File "/.../venv/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
  File ".../venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
  return self.cursor.execute(sql, params)
 django.db.utils.ProgrammingError: syntax error at or near "WITH 
ORDINALITY"
LINE 6:                     FROM unnest(c.conkey) WITH ORDINALITY co...
                                              ^
要执行的操作:
应用所有迁移:管理、身份验证、注释、内容类型、新闻、会话
运行迁移:
正在应用注释.0003_auto_20180816_2158…回溯(最近一次调用上次):
文件“./venv/lib/python3.6/site packages/django/db/backends/utils.py”,第85行,在
返回self.cursor.execute(sql,params)
psycopg2.ProgrammingError:语法错误位于或接近“WITH ORDINALITY”
第6行:从unnest(c.conkey)到序数坐标。。。
^
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“manage.py”,第15行,在
从命令行(sys.argv)执行命令
文件“../venv/lib/python3.6/site packages/django/core/management/_init__.py”,第381行,从命令行执行
utility.execute()
文件“../venv/lib/python3.6/site packages/django/core/management/_init__.py”,执行中第375行
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“../venv/lib/python3.6/site packages/django/core/management/base.py”,第316行,在运行中,从
self.execute(*args,**cmd_选项)
文件
“../venv/lib/python3.6/site packages/django/core/management/base.py”,执行中第353行
输出=self.handle(*args,**选项)
文件
“../venv/lib/python3.6/site-packages/django/core/management/base.py”,第83行,包装
res=句柄函数(*args,**kwargs)
文件“../venv/lib/python3.6/site-
packages/django/core/management/commands/migrate.py”,第203行,在handle中
假首字母=假首字母,
文件
“../venv/lib/python3.6/site-
packages/django/db/backends/base/schema.py”,第531行,在\u alter\u字段中
fk_名称=自我约束_名称(模型,[old_field.column],
外键(键=真)
文件“../venv/lib/python3.6/site packages/django/db/backends/base/schema.py”,第1027行,以约束名称
约束=self.connection.introspection.get_约束(游标、模型._meta.db_表)
文件“../venv/lib/python3.6/site-
packages/django/db/backends/postgresql/introspection.py”,第158行,在get\u约束中
“”,[“公共”,表名称])
文件“../venv/lib/python3.6/site packages/django/db/backends/utils.py”,
第100行,执行中
return super().execute(sql,params)
文件
“../venv/lib/python3.6/site packages/django/db/backends/utils.py”,执行中的第68行
返回self.\u使用包装器执行(sql,params,many=False,executor=self.\u execute)
文件“../venv/lib/python3.6/site packages/django/db/backends/utils.py”,第77行,在带有包装器的执行中
返回执行器(sql、参数、多个、上下文)
文件“../venv/lib/python3.6/site packages/django/db/backends/utils.py”,第85行,在
返回self.cursor.execute(sql,params)
文件“/…/venv/lib/python3.6/site packages/django/db/utils.py”,第89行,在__
使用exc_值的_回溯(回溯)提高dj_exc_值
文件“../venv/lib/python3.6/site packages/django/db/backends/utils.py”,第85行,在
返回self.cursor.execute(sql,params)
django.db.utils.ProgrammingError:语法错误位于或接近“WITH”
“平凡”
第6行:从unnest(c.conkey)到序数坐标。。。
^

无论如何,如果在那之后我再次尝试进行迁移,会收到消息说我没有进行迁移。因此,Django做了这项工作,但当我尝试迁移时,这个错误经常出现,我真的很想知道为什么。我尝试用谷歌搜索它,但什么也没有得到。

首先,你必须删除每个应用程序中的迁移文件夹

然后,可以使用迁移命令

python manage.py makemigrations
python manage.py migrate

无论何时添加任何新字段,并且面临迁移错误

请遵循以下步骤:

  • 删除所有迁移文件(不是迁移文件夹,保留
    \uuuu init\uuuu.py
    文件
  • 截断
    django_迁移
  • 注释要从models.py添加的新字段。(请确保执行此步骤,否则当您执行以下步骤时,django将抛出错误)
  • 运行
    python manage.py makemigrations
  • 运行
    python manage.py migrate--false
  • 取消注释要添加的新字段
  • 运行
    python manage.py makemigrations
  • 运行
    python manage.py migrate
通常,这些步骤可以解决任何类型的迁移问题


p.S.:当您仅在一个应用程序中遇到问题时,我建议从django_迁移表中删除该特定应用程序的条目我在
postgresql-server-9.2.24-1.el7_5.x86_64
中遇到了与默认情况下安装在
Centos 7
中的
相同的问题。安装
postgresql 11解决了问题。

删除每个应用程序中的“迁移”文件夹。@L你在开玩笑吧?我知道应该读到:D,它在utils.py文件中,而不是我创建或更改的文件。我所做的某些操作可能会导致Django自动创建的文件-utils中出现错误。py@MohammadAli再次感谢你!!!我真是感激不尽奥雷!请写下来作为回应,我会接受的。:)如果您正在使用Postgres,请检查此选项,这在许多极端情况下都不起作用。请避免为任何迁移问题删除迁移文件夹。我以前也犯过同样的错误,直到我被困在这个问题上。我正在写一个关于如何进行迁移和解决迁移问题的详细答案,我一直在帮助我。谢谢@agro!我竖起了大拇指你的回答证实了穆罕默德,因为他一天前的评论帮助了我。但是你的回答