(十) Django-資料庫互動

Django提供一個API作為與資料庫的接口,只要進入shell輸入指令就可以來操作資料庫了。

1
python3 manage.py shell

一、新增資料

1
>>> from quiz.models import Question, Choice # 匯入model>>> Question.objects.all() # 列出資料庫的所有列<QuerySet []> # 結果表示目前還沒有任何資料>>> q = Question(question_text=\"哈利波特中,普等巫測成績等級最高的是?\") # 新增資料列>>> q.save() # 完成這一步才算儲存>>> q.id1 # Django本身內建id欄位>>> q.question_text\"哈利波特中,普等巫測成績等級最高的是?\">>> q.question_text = \"佛地魔的本名是?\" # 更改資料>>> q.save()>>> Question.objects.all()<QuerySet [<Question: Question object (1)>]>

OK,這樣根本看不出來它是誰,需要幫models.py加點東西:

1
from django.db import modelsclass Question(models.Model):    # ...    def __str__(self):        return self.question_textclass Choice(models.Model):    # ...    def __str__(self):        return self.choice_text

再跑一次:

1
<QuerySet [<Question: 佛地魔的本名是?>]>

二、新增一對多的資料

新增題目選項:

1
>>> q = Question.objects.get(pk=1) # pk:primary_key,由於我們在models.py並沒有指定其他欄位為主鍵,Django本身默認id為主鍵,固代入id=1也可以。>>> q.choice_set.all() # 得到該Question相關的Choice<QuerySet []> # 還沒有新增所以得到一個空的list>>> c = q.choice_set.create(choice_text='Tom Marvolo Riddle', score=10)>>> c.question # Choice所屬的Question<Question: 佛地魔的本名是?># 繼續新增Choice>>> q.choice_set.create(choice_text='Tom Marvilo Riddle', score=0)>>> q.choice_set.create(choice_text='Tom Marvin Riddle', score=0)>>> q.choice_set.create(choice_text='Tom Ravolo Riddle', score=0)>>> q.choice_set.all()<QuerySet [<Choice: Tom Marvolo Riddle>, <Choice: Tom Marvilo Riddle>, <Choice: Tom Marvin Riddle>, <Choice: Tom Ravolo Riddle>]>