iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務系列 第 12

[Day 12] 第一主餐 pt.5-MySQL Django一起串聯,就是這麼簡單

在昨天我們成功透過url取得我們的django連接以及內容了
今天我們要再回到虛擬環境,架設MySQL資料庫以及跟我們Django做連接
這個部分會有比較多步驟,大家可要抓緊了,累狗~

MySQL,後端的倉庫管理員

再開始安裝之前,先來講講MySQL的功用是啥
簡單來說就是,你會有一個記憶體區域叫做資料庫
這個資料庫你可以想像成一個very very大的倉庫
裡面可能包含了使用者帳號、密碼、商品名稱、數量、你家的拖鞋、十年前弄丟的橡皮擦
好啦後面兩個可能不會有
不過資料庫就是會擺放你前後端會用到各種東東的地方
那MySQL的功用就是倉庫的管理員,只要你懂MySQL,MySQL就會給你
簡單來說,你只要跟MySQL說
"欸,我要某某某的最後登入日期,你那邊有沒有"
或是
"欸,給我這個月所有的交易紀錄,啊對只要給我日用品類型的就好,其他不用"
MySQL就會根據你的要求回傳給你對應的東東
這就是MySQL的功用

那要怎麼安裝呢,這個地方就比較複雜了
我們總共要安裝3個東東,安裝的所有內容如下:

sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev

這些東西就是所有mysql要用到的東東
下載完以後我們啟動mysql

sudo service mysql start

啟動完之後輸入mysql看看有沒有安裝成功

看起來雖然被賞了一個NO,不過看起來應該是安裝成功了
接下來我們就要來設定MySQL啦

此生到SQL,你是誰,曾怎麼活

首先要知道,不是人人都可以跟MySQL互動的,就跟你我常常看到的地下賭場一樣(?
只有被MySQL認可的人,才可以進一步跟MySQL要資料
不過還好要加入MySQL俱樂部不用找有頭有臉的人引薦,只要繞過去先建立好權限帳號就好
首先我們先下指令

sudo cat /etc/mysql/debian.cnf

下完之後應該會出現這個東東

這就代表經營MySQL的老闆資料
而要騙過MySQL方式非常簡單
先下mysql -u "老闆名字" -p
這裡的老闆名字叫做debian-sys-maint,因此我們下這個指令
mysql -u debian-sys-maint -p
輸入完之後,MySQL會問你密碼多少確認你是不是真的老闆
那密碼就輸入之前那筆資料的密碼就好

輸入完MySQL就會讓你進入資料庫倉庫啦

進入資料庫後,當務之急當然是先把自家的root設成你可以用密碼登入的狀態
畢竟root權限可是代表著CEO級別的,區區店老闆怎能相比
所以我們先選擇mysql這個Database
use mysql;
然後把使用者的名稱跟登入方式顯示出來
select user, plugin from user;
輸入完後應該像這樣

可以看到除了root以外的plugin屬性都是mysql_native_password
那我們就順便把root改成mysql_native_password吧
輸入update user set plugin='mysql_native_password' where user='root';
把root也改成用密碼登入
接著居然都改成密碼登入了,那當然要賦予root一個密碼囉
我們繼續輸入
update user set authentication_string=password('AmaneKanata') where user='root';
這意思就是把root的密碼設成AmaneKanata
至於為什麼要設成這個密碼呢,你去Google就知道
設完密碼後別忘了更新權限
flush privileges;
更新完之後輸入exit離開MySQL,離開前可以看到管理員還會很有禮貌的跟你說聲bye
接著就來測試使用root能不能登入啦
輸入mysql -u root -p,接著輸入我們剛剛設定的密碼

成功進來啦~
這樣我們的MySQL權限修改就算完成了

與django之書

MySQL處理完之後,最後一步就是要跟django連結啦
至此我們還要再下載一個東西叫MySQL-python
讓我們Python跟MySQL可以做連結
廢話不多說 pip3 install MySQL-python



沒辦法,既來之王羲之,處理BUG吧
於是我又去拜了StackOverflow大神得到了答案,看來是直接載configparser這個東東再把他設定成環境變數就好
好的那也沒啥問題 pip3 install configparser
再來
sudo cp /usr/lib/python3.6/configparser.py /usr/lib/python3.6/ConfigParser.py
好,再來一次 pip3 install MySQL-python(前面試了一些方法因此有些雜訊,請見諒)

成功啦~

好的接下來換django的回合啦
這裡非常簡單,我們打開我們的settings.py
看到DATABASES這邊

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

把這段改成這樣

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #因為你用的是MySQL
        'NAME': 'data',                       
        'USER': 'root',                       #這裡用最高權限管理員
        'PASSWORD': 'AmaneKanata',            #你的密碼
        'HOST': '',                           #空白預設為localhost
        'PORT': '',                           #空白預設為DB port
    }
}

然後我們回到console,新增一個app(為啥要新增app下篇講解)
python manage.py startapp stonks_index
可以看到這邊多了一個stonks_index資料夾

裡面應該會有一個models.py
我們把models.py的code改成下面的程式碼

from django.db import models

# Create your models here.
class DBTest(models.Model):
    test = models.CharField(max_length=100, primary_key=True)

然後我們執行python3 manage.py makemigrations會發現
他又報錯了
(因為這裡忘記截圖了,請客官當作這邊有噴錯的圖)
查了一下發現是mysql的版本出問題
所以我們就把mysqlclient改成2.0版本
我們下這個指令:pip3 install mysqlclient==2.0.1
然後重新執行python3 manage.py makemigrations

可以看到他說找不到'data'這個database
不過由於篇幅關係,我們下一篇再來處理

總之,今天我們架好了MySQL,以及確定有跟django做連結了
明天我們再處理mySQL的問題,以及建立MySQL的table
欲知database如何運作,以及django如何做到神奇的建立table
咱們下回分解~


上一篇
[Day 11] 第一主餐 pt.4-Djgnao,進化
下一篇
[Day 13] 第一主餐 pt.6-叮咚,有您的包裹
系列文
BeautifulSoup網頁爬蟲佐Django伺服器框架附AWS雲端運算服務30

尚未有邦友留言

立即登入留言