標籤:
上篇文章建立了一個空的網站。現在我們要準備正式我們的網站開發咯。那麼開發的第一步是啥呢?當然是要確定做什麼網站了。每個人的開發習慣可能不盡相同,有點可能是從前端開始設計,有的可能是從資料庫開始設計(不得不說django在資料庫操作方面是很強大的)。我屬於後者,因為我對前端不太熟悉,哈哈!
我要做一個公司內部團體訂餐系統,方便統一訂餐。功能需求很簡單:公司每天要訂餐,訂餐每天定一家餐館的菜。
我想到需要建立如下資料庫表:餐館(Restaurant)、商品分類(Category)、商品(good)、消費者(Custom)、消費者評論(Comment )、菜(Menu每個消費者可能有多個菜),訂單(Order 每天訂單次數基本固定)。具體到每個表的關鍵字,在後面會看到。
好了分析好了我們需要的資料結構,我們就利用Python-django構建我們的資料庫,由於此系統對資料庫的要求不高,我們使用預設的sqlite:
1. 首先我們要建立一個app(為啥叫app,待後續分解)。我們建立一個名為polls(名字你隨意):python manage.py startapp polls
2. 如果執行成功,會再工程目錄下產生一個polls目錄。
3. 設計資料庫結構及映射關係:django採用ORM(對象關係映射)來建立資料庫。你要建立的資料庫,需要修改polls app目錄下的models.py 檔案。在此檔案中添加對象及對象之間的映射關係,以下為我的修改,添加了之前說明的資料庫表:
1 from django.db import models 2 3 # Create your models here. 4 5 class Restaurant(models.Model): 6 name = models.CharField(max_length=50) 7 URL = models.CharField(max_length=200, default="") 8 9 def __str__(self):10 return self.name11 12 class Category(models.Model):13 name = models.CharField(max_length=50)14 15 def __str__(self):16 return self.name17 18 class Good(models.Model):19 name = models.CharField(max_length=50)20 price = models.FloatField()21 description = models.CharField(max_length=200)22 category = models.ForeignKey(Category)23 restaurant = models.ForeignKey(Restaurant)24 25 def __str__(self):26 return self.name27 28 class Custom(models.Model):29 name = models.CharField(max_length=20)30 sex = models.BooleanField()31 age = models.IntegerField()32 department = models.IntegerField()33 34 def __str__(self):35 return self.name36 37 class CustomComment(models.Model):38 content = models.CharField(max_length=200)39 score = models.IntegerField()40 good = models.ForeignKey(Good)41 custom = models.ForeignKey(Custom)42 43 def __str__(self):44 return self.content45 46 class Order(models.Model):47 name = models.CharField(max_length=50, default= "晚餐")48 date = models.DateTimeField()49 50 def __str__(self):51 return self.date52 53 class Menu(models.Model):54 order = models.ForeignKey(Order)55 good = models.ForeignKey(Good)56 custom = models.ForeignKey(Custom)57 58 def __str__(self):59 return self.order60
4. 將以上資料庫表資訊及映射關係應用到真實的資料庫中:
- 根據model產生具體操作檔案,告訴django你的資料庫變化:python manage.py makemigrations polls
- 上述操作會產生一個以序號開標頭檔,首次是0001,之後每次操作加1,要做修改修改指令後面對應的數字即可,我們要利用這個檔案產生具體操作資料庫的sql語句:python manage.py sqlmigrate polls 0001
- 好了有了sql語句我們就可以真正修改資料了:python manage.py migrate
- 有時候我們的第設計一次的資料庫並不是完美的,如果添加新的非空列,在model中要設定default值。上面的產生sql語句的指令注意使用新的序號。
- 你可以通過python命令列體驗具體如何操作資料:
$python>>> import django>>> django.setup()>>> from polls.models import Restaurant, Category,Good #引入資料對象>>> Restaurant.objects.all() #查詢所有餐館資料>>> r = Restaurant("宇宙卷餅","http://waimai.baidu.com/waimai/shop/598777734712241745")>>> r.save()>>> c = Category("熱賣")>>> c.save()>>> g = Good("醬香雞腿肉卷(中份)", 20, "美味", c, r, 0)>>> g.save()>>> g.name #查詢儲存結果>>> g.category.name>>> g.restaurant.name
好了現在資料庫建立完畢,我們也進行了測試
一步步學習Python開發-建立django資料庫