1

データベースにデータを入力しようとしていますが、django API を使用して実行したいと考えています。これを非常に簡単に行えるようにするPythonモジュールを作成しました。

ただし、django シェル (manage.py) 内では、"populate.py" ファイルを実行できないようです。

django シェルから populate.py を実行することは可能ですか? または、代わりに通常の python ターミナルを実行し、必要な django コンポーネントをインポートする必要がありますか? いずれにせよ、いくつかの指針をいただければ幸いです。

4

3 に答える 3

4

loaddataコマンドの使用を検討するか、独自のコマンドを作成することもできます

于 2012-05-12T04:33:09.163 に答える
1

これは、コマンド ラインから django を実行するための標準的なラッパーです。これは、実行したい cron スクリプトがある場合にも役立ちます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, sys
# If this script lives in a child directory of the main project directory
# uncomment the following 2 lines:
#dir_parent = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
#sys.path.insert(0, dir_parent)

from django.core.management import setup_environ
import settings
setup_environ(settings)

from django.db import transaction

# import whatever you like from app.models or whatever
# do random stuff.

# If you are *changing* database records,
# wrap your database code either in:
@transaction.commit_manually
def foo():
   ... stuff
   transaction.commit()

# OR end you script with:
transaction.commit_unless_managed()

コメントの更新:

上記の変数は ではなくfile、そうです__file__(つまり、2 つのアンダースコアfileとさらに 2 つのアンダースコア)。これは常に、Python インタープリターによって、それが発生するファイルのフルパスに設定されます。コメントにあるように、このスクリプトがメインディレクトリの子ディレクトリにある場合、ファイル名のディレクトリのディレクトリはあなたに与えますメイン プロジェクト ディレクトリのディレクトリ名を追加するとsys.path、すべてのインポートが正しく機能することが保証されます。スクリプトメイン ディレクトリにあり、そこから実行する場合は、その必要はありません。

于 2012-05-12T04:38:12.750 に答える