尝试在Django 1.9中迁移-奇怪的SQL错误“ django.db.utils.OperationalError:在“)”附近:“语法错误”; [英] Trying to migrate in Django 1.9 -- strange SQL error "django.db.utils.OperationalError: near ")": syntax error"

查看:100
本文介绍了尝试在Django 1.9中迁移-奇怪的SQL错误“ django.db.utils.OperationalError:在“)”附近:“语法错误”;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道是什么原因导致此错误。似乎没有可修复的错误。谁能告诉我有关如何解决这个问题的提示?这让我无休止。谢谢。

I don't have a clue what's causing this error. It appears to be a bug that there isn't a fix for. Could anyone tell give me a hint as to how I might get around this? It's frustrating me to no end. Thanks.

Operations to perform:
  Apply all migrations: admin, contenttypes, optilab, auth, sessions
Running migrations:
  Rendering model states... DONE
  Applying optilab.0006_auto_20160621_1640...Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "C:\Python27\lib\site-packages\django\core\management\commands\migrate.py", line 200, in handle
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
  File "C:\Python27\lib\site-packages\django\db\migrations\executor.py", line 92, in migrate
    self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "C:\Python27\lib\site-packages\django\db\migrations\executor.py", line 121, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "C:\Python27\lib\site-packages\django\db\migrations\executor.py", line 198, in apply_migration
    state = migration.apply(state, schema_editor)
  File "C:\Python27\lib\site-packages\django\db\migrations\migration.py", line 123, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "C:\Python27\lib\site-packages\django\db\migrations\operations\fields.py", line 121, in database_forwards
    schema_editor.remove_field(from_model, from_model._meta.get_field(self.name))
  File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\schema.py", line 247, in remove_field
    self._remake_table(model, delete_fields=[field])
  File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\schema.py", line 197, in _remake_table
    self.quote_name(model._meta.db_table),
  File "C:\Python27\lib\site-packages\django\db\backends\base\schema.py", line 110, in execute
    cursor.execute(sql, params)
  File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 95, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py", line 323, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: near ")": syntax error

以下是0006_auto_20160621_1640.py的内容

Here's the contents of 0006_auto_20160621_1640.py

# -*- coding: utf-8 -*-

# Generated by Django 1.9.6 on 2016-06-21 22:40
from __future__ import unicode_literals

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('optilab', '0005_test'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='lasersubstrate',
            name='substrate_ptr',
        ),
        migrations.RemoveField(
            model_name='waveguidesubstrate',
            name='substrate_ptr',
        ),
        migrations.DeleteModel(
            name='LaserSubstrate',
        ),
        migrations.DeleteModel(
            name='WaveguideSubstrate',
        ),
    ]

这是运行'python manage.py sqlmigrate optilab 0006'生成的SQL

Here's the SQL produced from running 'python manage.py sqlmigrate optilab 0006'

BEGIN;
--
-- Remove field substrate_ptr from lasersubstrate
--
ALTER TABLE "optilab_lasersubstrate" RENAME TO "optilab_lasersubstrate__old";
CREATE TABLE "optilab_lasersubstrate" ("substrate_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "optilab_substrate" ("id"));
INSERT INTO "optilab_lasersubstrate" () SELECT  FROM "optilab_lasersubstrate__old";
DROP TABLE "optilab_lasersubstrate__old";
--
-- Remove field substrate_ptr from waveguidesubstrate
--
ALTER TABLE "optilab_waveguidesubstrate" RENAME TO "optilab_waveguidesubstrate__old";
CREATE TABLE "optilab_waveguidesubstrate" ("substrate_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "optilab_substrate" ("id"));
INSERT INTO "optilab_waveguidesubstrate" () SELECT  FROM "optilab_waveguidesubstrate__old";
DROP TABLE "optilab_waveguidesubstrate__old";
--
-- Delete model LaserSubstrate
--
DROP TABLE "optilab_lasersubstrate";
--
-- Delete model WaveguideSubstrate
--
DROP TABLE "optilab_waveguidesubstrate";

COMMIT;


推荐答案

这似乎是导致错误的行:

This appears to be the line that's causing the errror:

 INSERT INTO "optilab_lasersubstrate" () SELECT  FROM "optilab_lasersubstrate__old";

通常希望您在这些括号中有一个列列表。例如插入 optilab_lasersubstrate(col1,col2等),但是迁移产生了一个空白集!同样, SELECT FROM 部分应读为 SELECT col1,col2 FROM 。通过一些奇怪的事件,您似乎设法创建了一个没有列的表!

You are usually expected to have a list of columns in those parenthesis. Eg INSERT INTO "optilab_lasersubstrate" (col1,col2,etc) however the migration has produced a blank set! Similarly the SELECT FROM portion should read as SELECT col1,col2 FROM. By some strange set of events you appear to have managed to create a table with no columns!!

我从您的迁移文件中看到,您无论如何都在删除该表。因此,没有任何理由为 RemoveField 部分所困扰。它与导致错误的 RemoveField 关联的代码。更改您的迁移,如下所示:

I see from your migration file that you are anyway dropping this table. So there isn't any reason to struggle with the RemoveField portion. It's code associated with the RemoveField that's causing the error. Change your migration as follows:

class Migration(migrations.Migration):

    dependencies = [
        ('optilab', '0005_test'),
    ]

    operations = [
        migrations.DeleteModel(
            name='LaserSubstrate',
        ),
        migrations.DeleteModel(
            name='WaveguideSubstrate',
        ),
    ]

这篇关于尝试在Django 1.9中迁移-奇怪的SQL错误“ django.db.utils.OperationalError:在“)”附近:“语法错误”;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆