web-dev-qa-db-ja.com

Django:テーブルが存在しません

アプリに関連するテーブルをいくつか削除しました。そして、再びsyncdbコマンドを試しました

python manage.py syncdb

次のようなエラーが表示されます

Django.db.utils.ProgrammingError: (1146, "Table 'someapp.feed' doesn't exist")

models.py

class feed(models.Model):
    user = models.ForeignKey(User,null=True,blank=True)
    feed_text = models.CharField(max_length=2000)
    date = models.CharField(max_length=30)
    upvote = models.IntegerField(default=0)
    downvote = models.IntegerField(default=0)

    def __str__(self):
        return feed.content

そのアプリのテーブルを取得するにはどうすればよいですか?

27
Vivek Ananthan
  1. テーブルをドロップします(すでに行っています)。
  2. model.pyでモデルをコメントアウトし、
  3. そして..

if Django version> = 1.7:

python manage.py makemigrations
python manage.py migrate --fake

else

python manage.py schemamigration someapp --auto
python manage.py migrate someapp --fake
  1. models.pyでモデルにコメントインする
  2. ステップ3に進みます。[〜#〜] but [〜#〜]今回は-fakeなし
73
doniyor

まだ問題を抱えている可能性のある人(私のように)については、これを試してください:

メインアプリのurls.pyにあるすべてのURLをコメントアウトします

次に、移行を実行します。

$ ./manage.py makemigrations
$ ./manage.py migrate

この問題は、()を削除することで軽減されました

    solved_time = models.DateTimeField('solved time', default=timezone.now())

    solved_time = models.DateTimeField('solved time', default=timezone.now)

redditからこの回答を得ました

13
Keith Yong

上記の解決策のどれも私にとってはうまくいきませんでした、私は最終的に解決しました

Sudo systemctl stop mysql.service

Sudo apt-get purge mysql-server

Sudo apt-get install mysql-server

Sudo systemctl stop mysql.service

私の場合、プルしたコードには managed= False があり、テーブルをDjangoで管理したかったのです。

しかし、移行を行ったときにカスタムテーブルが検出されなかったか、app_name.Table_nameが存在しないというエラーが表示されていました

私は次を試しました:

  1. 移行フォルダー内のすべての移行ファイルを削除し(init。pyファイルを除く)、その後、移行を行い、最後に移行します
  2. 上記の2つの答え
  3. this

PS:このソリューションは、バックアップが存在するか、データが重要でないか、テーブルの作成を開始したばかりの場合にのみ実行可能です。mysqlをパージするとデータが失われます

1
coda

この問題は、本番と開発で同じデータベース構造で遊んでいたときに発生しました。テーブルをドロップして再作成すると問題が解決する可能性がありますが、データベース自体をチェックして、モデルが実際に正しいかどうかを確認する価値があります。私自身は、テーブル名をすべて小文字にして開発データベースを誤って作成しましたが、本番環境では、テーブルの最初の文字が大文字になっています。実稼働データベースでpython manage.py inspectdbコマンドを使用し、それをモデルと比較し、モデルでは「テスト」ではなくテーブル「テスト」にデータを挿入しようとしていることがわかりました例えば、将来あなたの何人かを助けることを願っています。

0
echohabz