背景情報: 私は django の初心者であり、python の知識が豊富で、mysql (したがって mariaDB) の初心者でもあります。次のバージョンの Windows 7 環境で作業しています。
- ジャンゴ1.9.1
- マリアDB 10.0.20
- パイソン 3.4.4
- Python 3.4 の場合は mysql-connector\Python 2.1.3
目標: django を使用して、mariaDB データベースと Web ベースのユーザー インターフェイスを構築しようとしています。mysqlで事前にデータベースを構築しており、現在、このデータベースをレガシーデータベースとして使用してdjangoプロジェクトを作成しようとしています.
問題: 次のようにモデルを django プロジェクトに取得しました。
python manage.py inspectdb > models.py
そしてそれはうまくいきました。models.py もチェックしましたが、問題ないように見えました。
ここで、次のように、django に基づいてレガシー データベースにテーブルを作成するために移行しようとすると、次のようになります。
python manage.py migrate
ネストされたエラーがたくさん発生し続けます。最後のエラーは次のとおりです。
django.db.migrations.exceptions.MigrationsSchemaMissing: Unable to create the django_migrations table (Table 'mydb'.'django_migrations' already exists. Please DISCARD the tablespace before IMPORT.)
前回の試行でテーブルがデータベース フォルダに残っていると考えましたが、削除しても役に立ちません。データベースのコマンド プロンプトから、残っている唯一のテーブルがデータベースにネイティブであることを確認しても、同じエラー メッセージが表示されます。ある時点で、推奨されているコネクタ (mysqlclient) ではないため、使用しているコネクタに問題があるのではないかと考えました。
どこかで、移行さえ必要ないことがわかりました。これは明らかに私を救うでしょうが、それが私ができる解決策であるかどうかはわかりません. 理想的には、データベースは後でオンラインで管理され、管理者アカウントを持つユーザーはそこにエントリを追加できます。それ以外の場合、データベースはデータを返すだけです。
編集: python manage.py inspectdb > models.py 行のエラー メッセージを修正しました
編集29.1。 移行を次のように実行します。
python manage.py migrate --fake
同じエラーが発生します。
django プロジェクトを削除して新たに開始した後でも、問題は解決しません。
v2 29.1 を編集します。 データベース フォルダー内の django_migrations テーブルに必要なテーブル ファイルは 1 つだけです。django_migrations.ibd と django_migrations.frm があるはずです。ただし、移行を実行すると、django_migrations.ibd というファイルが 1 つだけ残ります。
ここで同様のことが起こっていましたが、別のファイル mysqldump の問題で、復元エラー: 'Please DISCARD the tablespace before IMPORT' が発生しました。選択した回答でよく説明されています。
これは私の問題に関連していると思いますが、何が助けになり、これをどうするべきかわかりません。
v3 29.1 を編集します。 そして最後に、ファイルがdjangoエラーを出していることに気付きました。59 行目の C:\Python34\lib\site-packages\django\db\migrations\recorder.py にある django の移行レコーダーです。
def ensure_schema(self):
"""
Ensures the table exists and has the correct schema.
"""
# If the table's there, that's fine - we've never changed its schema
# in the codebase.
if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()):
return
# Make the table
try:
with self.connection.schema_editor() as editor:
editor.create_model(self.Migration)
except DatabaseError as exc:
raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
エラーが発生する最後の行は 59 行目です。おかしなことに、テーブルが存在する場合、関数は機能するはずです。(以前の編集のように)私が思いつくことができる唯一のことは、実際には何らかの理由で移行プロセス中にfrmファイルが作成されないことです。
なぜそれが起こるのかは、私をはるかに超えています。