1

外部スクリプトを使用してデータベースを事前設定したいと考えています。スクリプトは次のとおりです

# -*- coding:utf-8-*-
import os, sys
from random import choice
PROJECT_DIR = os.path.abspath(os.path.join(os.path.abspath(__file__),'..','..'))

sys.path.append(PROJECT_DIR)
os.environ['DJANGO_SETTINGS_MODULE']='geoedu.settings'

from school.models import School    
from student.models import Student

if __name__=='__main__':
    student = Student(first_name=choice(first_names_males), last_name=choice(last_names_males),
                  father_name=choice(first_names_males), mother_name=choice(first_names_females),
                  mobile=choice(mobiles), telephone=choice(telephones))
    student.save()

ここで選択する引数は、名前と電話番号のリストです。実行すると、次のエラーが表示されます

django.db.utils.DatabaseError: no such table: student_student

ディレクトリツリー

geoedu
├── geoedu
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── geoedu.db
├── geoedu.sublime-project
├── geoedu.sublime-workspace
├── manage.py
├── school
│   ├── admin.py
│   ├── admin.pyc
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── tests.py
│   └── views.py
├── scripts
│   └── populate.py
└── student
    ├── admin.py
    ├── admin.pyc
    ├── __init__.py
    ├── __init__.pyc
    ├── models.py
    ├── models.pyc
    ├── tests.py
    └── views.py

それが行うことは、スクリプトフォルダー内に新しい geoedu.db を作成し、それを使用することです (これは空であり、student_student テーブルはもちろんありません)。

なぜそれが起こっているのですか?PROJECT_DIR は正しいもの (印刷されたもの) であり、すべての上にある geoddu であるツリーのルートです。

編集: 新しい学生を作成すると、新しい geoedu.db が作成されます。これらの行をコメントアウトすると、geoedu.db が作成されません。

4

2 に答える 2

0

Django でモデルを定義すると、インスタンスを操作するのに役立ちます。

ただし、その前に、sqlite db にテーブル「スケルトン」を作成する必要があります

このためには、次のようにしてデータベースを Django と同期するだけです。

python manage.py syncdb

これは一度だけ行う必要があります。

将来的には、おそらくモデルを進化させる必要があります (したがって、同様の db 進化が必要です)。現時点では、South (またはアドホック スキーマ進化クエリ) が役立ちます ( http://south.aeracode.org/ ) 。プロトタイプを作成しているので、db を削除して、syncdb を実行することで適切なテーブルで再作成できます。

于 2014-01-07T16:44:27.480 に答える