0

私が取り組んでいる Django プロジェクトには、多くのテーブルとデータがあります。私たちはまだ開発モードにいるので、多くのテストを行っています。偽のデータで遊ぶために、少数のユーザーにプロジェクトへのアクセスを今すぐ許可できるようにしたいと思います。私は時間をかけてすべての偽のデータをセットアップし、Web アプリを開いたときに、さまざまな状態のレコードが既に取り込まれているようにしました。

私の目標は、彼らがすべてをいじることができるようにすることですが、大きな「リセット」ボタンを押すことで、すべてを振り出しに戻すことができます。基本的には、すべてのレコードとデータを、私がデータとともに彼らに渡したときの状態に戻します。このようにして、彼らはいじくり回し、物事をテストし、最初からやり直してさらにテストを行うことができます。

編集 - テスターは1人だけなので、リセットしても他の人には影響しません

mysql 復元コマンドを実行する Django でクイック ビューを作成しましたが、ハングしています。私の見解は次のようになります。

def reset_db(request):
  reset = "mysql -v -u garfonzo -pMyPassword dbName < db_reset.sql"
  os.system(reset)
  return HttpResponse("success?")

DB を元の状態に戻すだけです。ただし、ハングします。コマンドを使用する-vと、最後に行うことは次のとおりです。

...a whole bunch of MySQL queries.... then
--------------
/*!40000 ALTER TABLE `auth_permission` ENABLE KEYS */
--------------

--------------
UNLOCK TABLES
--------------

--------------
DROP TABLE IF EXISTS `auth_user`
--------------

ここに座っているだけです...何もしないと、Webアプリが応答しなくなります。プロセスを強制終了して最初からやり直す必要があります (手動でリセットします)。

私の質問は2つあると思います:

  1. これはユーザーのリセット ボタンを実現するための最良の方法ですか? そうでない場合、より良い方法は何ですか?
  2. これがこれを達成する最善の方法である場合、なぜコードがハングするのでしょうか?

ご協力いただきありがとうございます。

4

2 に答える 2

1

すべての初期データにフィクスチャを提供し、syncdb を実行するためのビューをユーザーに提供して、初期データですべてをリセットすることをお勧めします。しかし、私はこれを自分で試したことはありません。

from django.core.management import call_command

def reset_db(request):
     call_command('syncdb', interactive=False)
于 2013-02-19T18:50:47.913 に答える
0

これは、データベースを復元するために使用するコマンドです。unix ターミナルにいることを確認します。mysql -u(ユーザー名) -p(パスワード) (データベース名)

于 2015-03-29T21:37:38.497 に答える