2014-01-07 79 views
1

我想使用外部腳本預填充我的數據庫。腳本如下從外部腳本訪問django sqlite數據庫

# -*- 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是正確的(打印出來),它是所有頂層geodedu樹的根。

編輯:新建geoedu.db時創建新學生。如果我註釋掉這些行geoedu.db沒有創建。

+1

,但在設置你怎麼有定義的數據庫結構文件? – Juliusz

+0

你的意思是怎樣的? ENGINE':'django.db.backends.sqlite3',。 'NAME':'geoedu.db',... etc 它與project_dir在相同的目錄中創建,您可以從樹命令中看到。 – Apostolos

+0

工作......猜測使用sqlite3時,數據庫的名稱必須始終是路徑而不只是名稱。感謝@Juliusz爲我指出了正確的方向 – Apostolos

回答

0

在Django中定義模型可以幫助您操作實例。

但之前,你有你的SQLite數據庫

對於這個創建表「骨架」,你只需要通過做與Django的數據庫同步:

python manage.py syncdb 

這有可能只做一次。在未來,您可能需要使模型發展(因此需要類似的數據庫變更),此時南方或特殊模式進化查詢將會很有用(http://south.aeracode.org/),但就您原型設計而言,你可以刪除數據庫,並通過執行syncdb重新創建好表格

+0

Syncdb正常執行 – Apostolos

0

問題是我沒有在settings.py文件中使用數據庫名稱的絕對路徑。我在數據庫引擎的名稱中添加了這個

'NAME':os.path.join(SETTINGS_DIR,'geoedu.db') 

和一切正常,因爲它應該。 PROJECT_DIR是

SETTINGS_DIR = os.path.dirname(__file__) 

因此數據庫是在設置文件夾內創建的。如果你想裏面的項目目錄,你應該做的

'NAME':os.path.abspath(os.path.join(SETTINGS_DIR,'..','geoedu.db'))