iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0

上一篇我們把MySQL安裝設定好,並且開始跟django做互動了
今天我們就要來把MySQL的東東全部設定好,並且使用django自動生成Table
廢話不多說,咱們累狗~

若無DB,何來Table

在上一篇我們可以看到,當我們要makemigrations時
MySQL告訴我們他找不到data這個Database
想當然爾,解決方法只要建立個Database就完事了
不過居然要自己手動新增Database,不如就給它取個好名字吧
一樣輸入mysql -u root -p登入
登入完之後,輸入CREATE DATABASE "你要的DB名稱";就可以建立一個Database啦
這裡我們把DB取名叫stonks_db,所以就下CREATE DATABASE stonks_db;
啊對順便說一下,MySQL的參數是不分大小寫的,這點要注意一下
建立完後exit,記得settings.py內的DATABASE NAME欄位也要改成stonks_db
全部處理完後再次輸入python3 manage.py makemigrations

OK這次就沒跳錯啦
但是在進入下一步之前,我們還有一個工作要處理
我們先再回去一趟MySQL
輸入show variables like '%character%';

可以看到這裡有些編碼是用latin1,簡單來說就是只支援歐美語系的字元啦
如果要支援中文字的話,就要改成utf8
所以我們要來去修改MySQL的設定檔,把編碼改成utf8
先離開MySQL terminal,然後輸入sudo vi /etc/mysql/my.cnf

輸入之後應該會看到這個畫面
沒錯,咱們要來教你基礎的linux terminal IO啦
首先先在這個畫面按下i,你最底下那一行應該會變成-- INSERT --
這就代表你目前在文件編輯狀態
我們把那個閃爍的字元位置提示拖到文章最末尾,然後按下ENTER,輸入下列文字

[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8

簡單來說就是把mysql的用戶端伺服端那些編碼都設成utf8,這樣之後存中文時才不會爆炸
輸入完之後按下ESC離開編輯模式,此時你的terminal應該要變成下面這樣

接著輸入:wq!
這一段代表儲存然後離開,並且不管權限問題,直接執行
執行完之後應該又會回來到command這邊了
我們輸入sudo service mysql restart重新啟動mysql
再次進入MySQL輸入show variables like '%character%';

看到database跟server欄位全部變成utf8就代表成功啦~

忍術Django操作資料庫術

前面提到了,Django最厲害的地方就是前後端跟Database一起整合
居然我們MySQL跟Django溝通都弄好了,那就來測試一下吧
不過測試之前,我們還有一個步驟要做
我們先打開settings.py,然後把剛剛建立的app加入INSTALLED_APPS裡面
此時你的INSTALLED_APPS list應該長這樣

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'stonks_index'
]

好的,處理完之後我們就可以把我們的migrations送上去啦
啊對我們上一篇我們還沒解釋為什麼要加app
簡單來說這東西就是Django的其他部門
這個部門裡面當然會有分工,包含客服人員,貨管人員,資訊人員等
只要總部(也就是我們設定的stonks_root)發現某個東西需要某個部門處理
django就會去找那個部門,然後部門就會開始照著url內的動作做事
那我們在這個部門建立model的用意就是,讓這個部門可以使用Database倉庫內的空間
建立並且管理所需資料
這就是我們開這個app的用意
好啦講解完了,那我們就繼續吧
先輸入python3 manage.py makemigrations紀錄models的修改
再輸入python3 manage.py migrate就可以把你在django內的資料庫變更送上去了
此時django就會自動跟MySQL要求給出空間,然後自動分配好空間內該有甚麼東西
就像下面這樣

有沒有體會到Django的強大之處了

建立完之後,我們就來測試一下一切是否安好
輸入python3 manage.py shell進入Django的terminal
然後輸入from stonks_index.models import DBTest
這裡的意思就是從stonks_index內的models檔案輸入DBTest這個Class
如果沒啥問題,應該會像下面這樣

沒有輸出就是最好的輸出

接著我們就可以來測試新增資料啦
輸入test_db = DBTest()
這個語句代表新增一個DBTest的object,然後裡面應該會有一個屬性叫做test
用白話文來說就是
你今天路過X聯看到了裡面有賣一個火鍋底料,於是你就跑進去全X裡面買了一個
這個火鍋底料基本上長相應該都是一模一樣的,就是那一包會鹹會辣液體
第二個顧客、第三個顧客、第2147483647個顧客去買這包火鍋底料一定都是一樣的
可是每個顧客回家裡時對這包火鍋底料的處理都不同
有的會放牛肉,有的放豬肉,有的放生菜,有的放火鍋餃,有的甚至把底料當湯來喝
這時火鍋的內容就代表著屬性,每個屬性可能都有自己的定義
但是class,也就是火鍋底料,基本上都是長的一樣的
當然也有黑魔法可以讓你的火鍋底料從麻辣鍋變成壽喜燒甚至變成鐵板燒,不過那不在我們討論範圍
以後有機會的話會再專門寫一篇文章跟大家講解

好的講解完之後,就可以知道DBTest()就是一個容器
那我們就把裡面的屬性修改一下吧,這時輸入
test_db.test = "I love Amane Kanata"
這時你的test屬性就變成了I love Amane Kanata這個字串
就像你在火鍋裡加入芋頭
啊不對這好像有點破壞性,改個例子好了
就像你在火鍋裡面加入豬肉片
裡面的東東改變了,但它還是火鍋
好的改完之後我們輸入test_db.save()

無事發生,非常好

輸入完之後我們回到MySQL看一下
進去MySQL之後輸入use stonks_db;
然後我們輸入SHOW TABLES;

可以看到我們有個table叫做stonks_index_dbtest
這就是django幫我們自動建立的table
然後我們再輸入SELECT * FROM stonks_index_dbtest;

就可以看到我們剛剛建立的資料欄位跟內容出現在table內啦

好的,以上就是我們Django建立table以及跟MySQL的互動過程
下一步我們將會教學如何寫一支API
以及API要怎麼自動把資料加入到Database
欲知人塊講接口API,愛安怎運作
且待下回分解~


上一篇
[Day 12] 第一主餐 pt.5-MySQL Django一起串聯,就是這麼簡單
下一篇
[Day 14] 第一主餐 pt.7-一支API,千萬request來相見
系列文
BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言