簡體   English   中英

如何修復“ django.db.utils.OperationalError:靠近“無”:語法錯誤” db.sqlite3?

[英]How to fix 'django.db.utils.OperationalError: near “None”: syntax error' db.sqlite3?

我正在嘗試為Django REST框架創建用戶模型,可悲的是,我遇到了一些意想不到的困難:當我運行python manage.py makemigrations時,所有功能都應正常運行,但是當我嘗試運行遷移時,我收到此錯誤“ return Database.Cursor.execute(self,query)django.db.utils.OperationalError:near“ None”:語法錯誤”。

我曾嘗試更改models.py中的代碼,但即使將用戶模型類設置為僅具有一個id字段,它仍然會產生相同的結果。 我正在使用Django 1.11.17版和drf 3.9.0版

models.py:

class User(models.Model):
    id = models.AutoField(primary_key=True)

    email = models.CharField(unique=True, null=False, max_length=200)
    phone = models.IntegerField(unique=True, null=False)
    first_name = models.CharField(null=False, max_length=200)
    last_name = models.CharField(null=False, max_length=200)
    is_active = models.BooleanField(_('active'), default=False)
    last_seen = models.DateTimeField(auto_now=True, null=True)
    updated_at = models.DateTimeField(auto_now=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True, null=True)

    avatar = models.CharField(null=True)

遷移/ 0001_initial.py:

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
    migrations.CreateModel(
        name='User',
        fields=[
            ('id', models.AutoField(primary_key=True, serialize=False)),
            ('email', models.CharField(max_length=200, unique=True)),
            ('phone', models.IntegerField(unique=True)),
            ('first_name', models.CharField(max_length=200)),
            ('last_name', models.CharField(max_length=200)),
            ('last_seen', models.DateTimeField(auto_now=True, null=True)),
            ('updated_at', models.DateTimeField(auto_now=True, null=True)),
            ('created_at', models.DateTimeField(auto_now_add=True, null=True)),
            ('avatar', models.CharField(null=True)),
        ],
    ),
]

全棧跟蹤:

  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 204, in handle
    fake_initial=fake_initial,
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/migrations/executor.py", line 115, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/migrations/executor.py", line 244, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/migrations/migration.py", line 129, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 97, in database_forwards
    schema_editor.create_model(model)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 319, in create_model
    self.execute(sql, params or None)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 136, in execute
    cursor.execute(sql, params)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
  File "/Users/my_username/myapp/myapp/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 326, in execute
    return Database.Cursor.execute(self, query)
  django.db.utils.OperationalError: near "None": syntax error

我希望能夠成功運行遷移。

問題最終是我沒有為頭像字段指定max_length,因此django生成的結果查詢為

CREATE TABLE "user" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "email" varchar(200) NOT NULL UNIQUE, "phone" integer NOT NULL UNIQUE, "first_name" varchar(200) NOT NULL, "last_name" varchar(200) NOT NULL, "is_active" bool NOT NULL, "last_seen" datetime NULL, "updated_at" datetime NULL, "created_at" datetime NULL, "avatar" varchar(None) NULL);

並且varchar(None)破壞了語法。 你懂得越多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM