2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OperationalError: no such table: テーブル名 エラー解決方法

Posted at

①はじめに

pythonを使ったwebアプリを作成するためにDjangoを利用して、ブログを作成していたのですが、エラーが出たので共有いたします。他のエラーを解決する方法にもなると思うので、困っている方は試してみてください。

②エラー内容

ブログの機能としてログイン機能を入れており、デフォルトではユーザー名でログインしますが、ユーザーモデルをカスタマイズして、メールアドレスでログインできるように認証で便利なallauthパッケージを利用しました。 モデルを変更し、python3 manage.py migrateでデータをセットアップした際に出たエラーが下記になります。
python
django.db.utils.OperationalError: no such table: app_category

または

python
sqlite3.OperationalError: no such table: app_category

上記エラーは、データベース上にapp_categoryというテーブル(データ)が入っていないという意味になります。
app_categoryのappは私が設定したappというフォルダ名で、categoryは私が設定したclass名です。
つまり、下記のようになります。

python
sqlite3.OperationalError: no such table: ファイル名_クラス名

③解決方法

1.db.sqlite3ファイルを削除 2.pythonファイルの「category」が入っているコードを全てコメントアウトします。(モデルのファイルだけでもいいかも) 3.モデルのコメントアウトした「category」を元に戻します。 4.次に、データベースを再作成します python3 manage.py makemigrations をターミナルに入力すると下記のようなメッセージが出ます。「デフォルトなしで投稿するために、null許容でないフィールド「category」を追加しようとしています。修正を選択してください:」というようなメッセージが出る場合があります。その時は選択肢1を入力し、次の画面でデフォルト値として適当な数字(1でok)を入れます。
You are trying to add a non-nullable field 'category' to post without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option: 1
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now
Type 'exit' to exit this prompt
>>> 1
Migrations for 'app':
  app/migrations/0006_auto_20210318_2344.py
    - Create model Category
    - Add field category to post

categoryモデルを作成することができたら
python3 manage.py migrate をターミナルに入力しデータをセットアップます。

Operations to perform:
  Apply all migrations: account, accounts, admin, app, auth, contenttypes, sessions, sites, socialaccount
Running migrations:
  Applying app.0006_auto_20210318_2344... OK

5.エラーが無ければ他のファイルでコメントアウトしたコードを元に戻します。python3 manage.py runserverでアプリページに移動し問題ければ成功です。
 エラーがあった場合はモデルの「category」のあるコードをコメントアウトし、一つずつコメントを解除し、エラーの原因を探っていくと解決できるはずです。

④最後に

OperationalError: no such tableのエラーでつまずいてしまった方の参考になると思うので試してみてください。
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?