web-dev-qa-db-ja.com

Django-そのようなテーブルはありません:main.auth_user__old

私は公式のDjangoドキュメントから 最初のアプリチュートリアル をフォローしていましたが、管理ページで行った変更を保存しようとするとこのエラーが発生しました。私はそれについていくつかの研究を行いましたが、dbの移行など、私が見つけることができた可能な解決策は、単に機能しません。あなたが私のコードの特定の部分を見たいかどうか私に知らせてください。

エラーは次のとおりです。

/ admin/polls/question/1/change /のOperationalErrorそのようなテーブルはありません:main.auth_user__old要求メソッド:POST要求URL: http://127.0.0.1:8000/admin/polls/question/1/change / Djangoバージョン:2.1.4例外タイプ:OperationalError例外値:そのようなテーブルはありません:main.auth_user__old例外ロケーション:/ Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py in execute、行296 Python実行可能ファイル:/ Users/gfioravante/Projects/test_app/ta_env/bin/python3 Pythonバージョン:3.7.1 Pythonパス:
['/ Users/gfioravante/Projects/test_app/test_app'、 '/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python37.Zip'、 '/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7'、'/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework /Versions/3.7/lib/python3.7/lib-dynload '、' /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages ']サーバー時間:2018年12月5日水曜日16:45 :00 +0000

そしてトレースバック:

環境:

リクエスト方法:POSTリクエストURL: http://127.0.0.1:8000/admin/polls/question/1/change/

Djangoバージョン:2.1.4 Pythonバージョン:3.7.1インストール済みアプリケーション:['polls.apps.PollsConfig'、 'Django.contrib.admin'、 'Django.contrib.auth'、 'Django.contrib .contenttypes '、' Django.contrib.sessions '、' Django.contrib.messages '、' Django.contrib.staticfiles ']インストール済みミドルウェア:[' Django.middleware.security.SecurityMiddleware '、' Django.contrib.sessions.middleware .SessionMiddleware」、「Django.middleware.common.CommonMiddleware」、「Django.middleware.csrf.CsrfViewMiddleware」、「Django.contrib.auth.middleware.AuthenticationMiddleware」、「Django.contrib.messages.middleware.MessageMiddleware」、「Django .middleware.clickjacking.XFrameOptionsMiddleware ']

トレースバック:

_execute 85の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py」ファイル。return self.cursor.execute(sql、params)

実行296のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py」。returnDatabase.Cursor.execute(self、query、 params)

上記の例外(このようなテーブルはありません:main.auth_user__old)は、次の例外の直接の原因でした:

内側34のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/core/handlers/exception.py」。response= get_response(request)

_get_response 126のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/core/handlers/base.py」。response = self.process_exception_by_middleware(e、request)

_get_response 124のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/core/handlers/base.py」。response = wrapped_callback(request、* callback_args、** callback_kwargs)

ラッパー604の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py」ファイル。return self.admin_site.admin_view(view)(* args、 ** kwargs)

_wrapped_view 142のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/utils/decorators.py」。response = view_func(request、* args、** kwargs)

_wrapped_view_func 44のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/views/decorators/cache.py」。response = view_func(request、* args、** kwargs)

内部223のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/sites.py」に戻ります。return view(request、* args、** kwargs)

Change_view 1640の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py」ファイル。return self.changeform_view(request、object_id、form_url、extra_context)

_wrapper 45の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/utils/decorators.py」ファイル。return bound_method(* args、** kwargs)

_wrapped_view 142のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/utils/decorators.py」。response = view_func(request、* args、** kwargs)

ファイル "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py"のchangeform_view 1525にある。return self._changeform_view(request、object_id、form_url、extra_context)

_changeform_view 1571のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py」。self.log_change(request、new_object、change_message)

Log_change 826の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/options.py」ファイル。change_message= message、

Log_action 35の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/contrib/admin/models.py」ファイル。change_message= change_message、

Manager_method 82のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/manager.py」。return getattr(self.get_queryset()、name)(* args、** kwargs)

作成413のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/query.py」。obj.save(force_insert=True、using = self.db )

保存718のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/base.py」。force_update=force_update、update_fields = update_fields)

ファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/base.py」のsave_base 748にあります。updated = self._save_table(raw、cls、force_insert、force_insert 、使用、update_fields)

_save_table 831のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/base.py」。result = self._do_insert(cls._base_manager、using、fields 、update_pk、raw)

_do_insert 869のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/base.py」を使用します。using= using、raw = raw)

Manager_method 82のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/manager.py」。return getattr(self.get_queryset()、name)(* args、** kwargs)

_insert 1136の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/query.py」ファイル。return query.get_compiler(using = using).execute_sql(return_id )

Execute_sql 1289の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/models/sql/compiler.py」ファイル。cursor.execute(sql、params)

ファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py」の実行100。return super()。execute(sql、params)

実行68の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py」ファイル。return self._execute_with_wrappers(sql、params、many = False、 executor = self._execute)

_execute_with_wrappers 77の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py」ファイル。return executor(sql、params、many、context)

_execute 85の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py」ファイル。return self.cursor.execute(sql、params)

ファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/utils.py」のexit89. raise dj_exc_value。 exc_valueからのwith_traceback(traceback)

_execute 85の「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/utils.py」ファイル。return self.cursor.execute(sql、params)

実行296のファイル「/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/Django/db/backends/sqlite3/base.py」。returnDatabase.Cursor.execute(self、query、 params)

例外タイプ:/ admin/polls/question/1/change /のOperationalError例外値:そのようなテーブルはありません:main.auth_user__old

43
NorthernSage

私はこれに出くわしたばかりで、 https://code.djangoproject.com/ticket/29182 に関連しているようです。現時点では、sqliteのバージョンを2.6より前のバージョン(2.5.1など)にダウングレードできます。

39
BenM

この問題は、SQLite 3.26.0のALTER TABLE RENAMEステートメントの動作が変更されたために発生します( 互換性に関する注意 を参照)。また、以前のバージョンとの互換性を維持するためにPRAGMA legacy_alter_table = ONステートメントを導入しました。今後の Djangoリリース2.1.5 では、前述のステートメントを修正プログラムとして利用します。 2019年1月1日に予定されています。

8
Imre Kis

このフォルダーに移動しますDjango/db/backends/sqlite3

'schema.py'ファイルを別のフォルダーにバックアップする

テキストエディタで元のschema.pyを開きます

そこにあなたは次のようなコードスニペットを見ることができます

    def __enter__(self):
    # Some SQLite schema alterations need foreign key constraints to be
     # disabled. Enforce it here for the duration of the schema edition.
     if not self.connection.disable_constraint_checking():
         raise NotSupportedError(
             'SQLite schema editor cannot be used while foreign key '
             'constraint checks are enabled. Make sure to disable them '
             'before entering a transaction.atomic() context because '
             'SQLite3 does not support disabling them in the middle of '
             'a multi-statement transaction.'
         )
     self.connection.cursor().execute('PRAGMA legacy_alter_table = ON')
     return super().__enter__()

それらをコメントし、次のコードスニペットを貼り付けます

     def __enter__(self):
    # Some SQLite schema alterations need foreign key constraints to be
    # disabled. Enforce it here for the duration of the transaction.
    self.connection.disable_constraint_checking()
    self.connection.cursor().execute('PRAGMA legacy_alter_table = ON')
    return super().__enter__()

これは私のために働いた。 (schema.pyのバックアップは、作業がうまくいかない場合のためです; D)

詳細については

https://github.com/Django/django/pull/10733/commits/c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f#diff-0c8f495bfee773ab7b5409533bd6d7ef

ありがとうございました

4

私にも同じことが起こり、とてもイライラします。環境にanacondaを使用していますが、最新バージョンのsqliteをすぐに再インストールしないとsqliteを削除できないことがわかりました。古いバージョンのDjangoを試してもうまくいかないようです。私のために働いた唯一の解決策は、PostgreSQLデータベースを使用することです。確かに理想的ではありませんが、将来PostgreSQLデータベースを利用することを計画しているため、これは完全な時間の無駄ではありませんでした。私と同じ場所にいることに気づいたら、PostgreSQLデータベースをDjangoプロジェクトに接続する方法を知りたい場合は、この video が役立つかもしれません。

Settings.pyで実際に変更を行う前にpostgreSQLデータベースをインストールする必要があります。インストールは、すべてのオプションで[次へ]をクリックするだけです。ただし、インストール時に使用するユーザー名とパスワードを覚えておいてください。

2
Ithomson90

Djangoを2.1.4から2.1.5にアップグレードすることで問題を解決しましたが、古いバージョンのDjangoを使用してデータベースに挿入したオブジェクトに関連していると思われるため、プロジェクトを新たに再構築する必要がありました。

1
Tms91

できることは、単にsqlite3ブラウザーを使用してデータベースに移動し、それぞれの属性を使用して参照テーブルをauth_user__oldからauth_userに変更するだけです。私にとってはうまくいき、私のプロジェクトはうまく機能しています。

0
Hritik kumar

djangoのバージョンを変更したくない場合は、データベースを変更する必要があります。 PostgreSQLの推奨事項を使用してください。問題は、移行後の移行と移行です。

0
Prosenjit

次の手順を維持して、この問題を簡単に取り除きます。

  1. djangoバージョン2.1.5を保持します(このバージョンで解決された問題)pip install Django==2.1.5
  2. SQLite dbを削除します
  3. python manage.py makemigrationsを再度移行してから、python manage.py migrateを移行します
  4. サーバーを起動しますpython manage.py runserver

完了!

0
nurealam siddiq

Djangoバージョンを1.5にダウングレードするか、バージョンをダウングレードしたくない場合は、ローカルで schema.py を変更し、パッチを適用してmakemigrations + migrateコマンドを実行できますが、推奨されません。

0
Mahesh Karia

2つのsqliteデータベースとカスタムデータベースルーターがあったことを除いて、同じ問題がありました。 Djangoを1.11.20にダウングレードすることで、データベースを再作成する必要がなく、機能するようになりました。

ソフトウェアをダウングレードしたくない人は、settings.pyファイルに移動し、DATABASES dictで、.sqlit3.postgresqlに置き換え、そのすぐ下でdb.sqlit3db.sqlに変更します。これにより、デフォルトのデータベースがpostgreSQLを使用するように切り替わります。

そのためには、pip install psycopg2が必要です。

db.sqlite3ファイルを削除します(ファイルがある場合/中身を失うことを気にしない場合)およびアプリの移行フォルダーにある__init__.pyファイル以外のすべてを削除します。すべてを完了したら、python manage.py makemigrationsとpython manage.py migrateを実行できます。

私は誰かを助けることができたと思います!

0
Ziiik

Djangoの最新バージョンを使用して問題を解決しようとしましたが、問題はまだ残っています。 DjangoとSqlite3でこの問題をデバッグしないときまでは、Djangoの古いバージョンを使用しています。バージョン1.10.5を使用することを検討してください(コマンドpip install --upgrade Django == 1.10.5を使用)

0
Mohammad Fraz

上記の回答でこのエラーを解決できない場合、「main」という名前でアプリを作成した場合、このエラーは同じアプリ名の問題の原因になる可能性があります。そのため、アプリ名「main」を別の名前に変更してみてください。

0
Jinho Park

手順:

  1. ENVから現在のDjangoをアンインストールします。フォルダー「anaconda3/envs/yourenv/lib/python3.7/site-packages/Django全バージョンを削除するだけです。*注:Anacondaユーザーの場合のみ、他のユーザーはENVからパッケージをアンインストールする方法を理解する必要があります。

  2. Github.com/Django/djangoにアクセスします。

  3. リポジトリをZipファイルとしてダウンロードします。

  4. Zipを抽出します。

  5. ENVに切り替えます。

  6. 解凍したフォルダーを入力します。

  7. 「python setup.py install」を実行し、Djangoをインストールします。

  8. 以前のdb.sqlite3ファイルを削除します。次に、移行を再度適用して、新しいdb.sqlite3ファイルを作成します。

*注意:以前のdbfileを修正してデータの損失を防ぐ方法はわかりません。知っているなら教えてください。

  1. サーバーを実行します。

おめでとうございます!現在は正常に動作しています。

Djangoの公式リリースから1月に最新のDjangoにアップデートしてください。

0
Amar Nath