2

sqlite db を作成するために syncdb を実行しています。最近まで機能していましたが、失敗する原因となる変更は何もありません。ほとんどの場合、いくつかのフィールド名を変更しただけです。

私はmodels.pyに以下を持っています:

    class GC_User(models.Model):
        first_name = models.CharField(max_length=50)
        last_name = models.CharField(max_length=50)
        email = models.EmailField()
        wp_userID = models.PositiveSmallIntegerField(unique=True)

古い db ファイルを削除した後に syncdb を実行すると、150 行のトレースバックが表示されます。その最後の部分は次のとおりです。

  File "C:\Python33\lib\site-packages\django\db\backends\util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "C:\Python33\lib\site-packages\django\db\backends\sqlite3\base.py", line 450, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: gameconapp_gc_user

これを引き起こしている可能性のあるものについて何か考えはありますか? それが役立つ場合は、トレースバックをさらに追加できます。

ありがとう!

更新:掘り下げた結果、私のパートナーは、問題はアプリケーションのinit.pyが呼び出されたことにあると判断しました。そこのルーチンが GC_User テーブルにアクセスしようとしたため、no such table エラーが発生しました。

今のところ、syncdb を実行できるようにコメントアウトしました。本番環境に入ったら、データベースをリセットすることはありませんが、データベースがセットアップされる前にアプリケーションが初期化されるのは直感に反します。

4

4 に答える 4

2

ローカルの SQLite 3 データベースでこの問題が発生しました。最初に、ファイルを削除して確認しました。

この問題を解決するために、私が使用した後、同期されていないと述べられている各アプリでsyncdb --no-initial-data使用を続けました。migrate

./manage.py syncdb --no-initial-data
./manage.py migrate app1
./manage.py migrate app2
./manage.py migrate app3

順序は保証されていないため、これは手動で行う必要があり、どの順序が適切かを確認するだけです。私の場合、simple_email_confirmation何よりも先にアプリを実行する必要がありました。数回試行した後、./manage.py migrateそれ自体で動作するはずです。

于 2014-08-24T11:34:20.573 に答える
1

モデルのフィールド名を変更したので、移行を処理するために南を使用していると思います。その場合、south は、migrate を実行する syncdb の後までデータベースを初期化しません。Django は、サーバーの起動時にすべて__init__のファイルをロードします。models.pyこれらのファイル内のデータベース アクセスを必要とするコードは、south を使用する場合に try/except でラップする必要があります。

try:
    #code requiring database access here
except OperationalError:
    #close the database connection
    connection.close()

これにより、何らかの理由で新しいデータベースを再度インストールする必要がある場合に、再度心配する必要がなくなります。

または、あなたのアプリは再利用可能なアプリではないため、次に最初から開始する必要がある場合は、南の移行を削除するだけです (既存のデータベースにのみ必要です)。

于 2014-03-11T21:56:44.937 に答える
0

モデルのフィールドを変更したために発生したこのエラー。テーブルは以前に作成され、そこでは変更されません。したがって、モデルとそれに対応するものをコメントアウトして、 ./manage.py makemigrations ./manage.py migrate --fake を試してください

コメントを削除して実行します

./manage.py makemigrations ./manage.py 移行

これは役立つはずです!

于 2019-02-27T20:31:34.330 に答える