Skip to content
On this page

中興大學 Python Django網頁App開發基礎班第01期 I

2023/06/28-2023/07/14

06/28 環境設置 :

  1. 網路結構介紹、資料庫初步介紹、作業環境安裝。
  1. 資料庫連結 : VSCode安裝MySQL外掛、與MySQL連線設定。

06/30 資料表建立 :

資料庫結構概念與實際範例探討資料表單欄位制定 (舉例 :Line接收、回收、刪除等功能在資料表如何呈現)、使用MySQL原始語法建立(CREATE)資料表。

sql
CREATE TABLE tablename(
    rowid   BIGINT  PRIMARY KEY AUTO_INCREMENT,
    yourname    VARCHAR(50) NOT NULL    COMMENT '姓名',
    gender  CHAR(1) NOT NULL    COMMENT '性別',
    birthday    DATETIME    NOT NULL    COMMENT '日期',
    phone   VARCHAR(20) NOT NULL    COMMENT '電話',
    email   VARCHAR(100)    NULL    COMMENT '電子信箱',
    addr    VARCHAR(200)    NOT NULL    COMMENT '年齡',
    yourage INTEGER NOT NULL    COMMENT '年齡',
    tall DECIMAL(6,2)   NOT NULL COMMENT '身高'
)

留意:

搞定資料表架構才能衍伸後續專案功能。

  1. NOT NULL與 NULL,表示填表時可否呈現空白送出資料。
  2. DECIMAL ( 6,2 )十進制,表示共6個位數,取小數第2位(1234.56),通常用在收支欄位上。
  3. 注意欄位名稱盡量不要取會與原本SQL的命名類似,避免產生問題。參考 SQL樣式指南 · SQL Style Guide

07/05 資料表處理 :

資料庫(表)架構複習與SQL語法學習

  1. 數值 :

    • 整數-INT、BIGINT
    • 浮點數-固定 : Decimal(長,小)、 不固定 : float
  2. 文字 :

    • 固定長度- CHAR、
    • 不固定長度- VARCHAR
  3. 日期 :

    • 標準日期-DateTime : 年/月/日 時:分:秒:百分之一秒。
    • 短日期-Smalldatetime : 年/月/日 時:分 (容量小的資料庫才會使用,如樹梅派、存放SD卡的資料庫等等)。
  4. 舉例 : 課表資料結構

    星期
    節次
    1國文
    張三
    英文
    李四
    數學
    張三
    體育
    張三
    音樂
    李四
    2國文
    李四
    數學
    李四
    體育
    張三
    音樂
    李四

    提醒 : 資料表名稱、欄位名稱、資料種類、可否省略 null

    sql
    CREATE TABLE classinfo(
        rowid   BIGINT PRIMARY KEY AUTO_INCREMENT,
        wday    INT NOT NULL    COMMENT '星期',
        claseq  CHAR(1) NOT NULL    COMMENT '節次',
        clasna  VARCHAR(100)    NULL    COMMENT '課程名稱',
        tecna   varchar(20) NULL    COMMENT '老師名'
    )
    
  5. 語法教學 (INSERT新增、UPDATE修改、DELETE):

以下為mytabl表單:

id *
(AUTO_INCREMENT)
name
(NOT NULL)
tel
(NOT NULL)
phone
(NULL)
1Evan04-56789100910-234567
2Hello03-4567879
  • 新增 : INSERT INTO 資料表(欄位n,...) + VALUES(數值n,...);
sql
/*標準語法*/
INSERT INTO mytable(id,name,tel,phone)
VALUES (1,Evan,04-5678910,0910-23456789);
INSERT INTO mytable(name,phone)
VALUES (Evan,01-1234567);
/*簡易語法 */
INSERT INTO mytable
VALUES (1,Evan,04-5678910,0910-23456789);

提醒

1. 如果使用簡易語法,欄位與順序都要一致。
2. 標準語法中,如果欄位原本設定為 NULL 或 AUTO_INCREMENT,則可以省略不填數值。
  • 修改/取代 : UPDATE 資料表 SET 欄位名=新數值n + WHERE 欄位名=舊數值n;
sql
 UPDATE mytable set name='Evan Hsiao' WHERE name='Evan'; 
 /*取代所有name的內容 */  
 UPDATE mytable set name='All Change';

提醒

如果沒有配合 WHERE,則所有指定的欄位數值會全部異動。
  • 刪除 : DELETE FROM 資料表 + WHERE 欄位名=數值
sql
DELETE FROM mytable
WHERE id=2;

提醒

與 UPDATE 一樣,只要沒有指定 WHERE,就會刪除整張內容,僅留資料表
  1. 刪除整張資料表 : DROP TABLE 資料表
sql
DROP TABLE mytable

警告

資料一經刪除,將無法復原,請謹慎。

  1. 建立索引 (Index): CREATE UNIQUE INDEX 新索引名 ON 資料表 (指定欄位)
    • 索引是一種資料的排序、分類,可幫助快速查找、及避免重複資料產生。
    • 設定過多索引會使存檔速度變慢,索引檔也會佔儲存空間。
    • 兩個方法設定索引: 關鍵/唯一值索引一般索引,兩個僅差在 UNIQUE
sql
/*關鍵 / 唯一值索引 */
CREATE UNIQUE INDEX new_index ON mytable(id);
sql
/*一般索引 */
CREATE INDEX new_index ON mytable(id);

提醒

  1. 整張資料表的設計,要先從上到下,還是左到右,是索引的順序,攸關後頭程式設計,須留意。
  2. 自動產生資料網站: MOKAROO
  1. 資料查找 (SELECT) : SELECT 欄位/全部 FROM 表單

    sql
      SELECT * FROM mytable;
      SELECT name,tel FROM mytable;
    
    • 查看時賦予新名稱 (欄位 AS 新名稱 )
    sql
     SELECT name AS 名字, tel AS 電話 FROM mytable;
    
    • 篩選掉重複資料 (DISTINCT)
    sql
     SELECT DISTINCT name FROM mytable;
    

07/07 資料表處理

資料庫(表)架構複習與SQL語法學習

  1. 選擇 SELECT
  2. 欄位 / 條件式(欄位) AS 新欄位名稱
  3. FROM 資料表
SQL
/*顯示更名*/
SELECT FirstName AS 名,LastName ASFROM myTable;
/*運算式*/
SELECT Price*Quantity AS 總價 FROM orderTable;
  1. WHERE 運算式 / ORDER BY排序(ASC升、DESC降) / GROUP BY篩選 / LIKE模糊查詢 (搭配 %_ 代替某字串)
SQL
/*篩選*/
SELECT * FROM myTable WHERE FirstName LIKE '%Eva_%';
SQL
/*條件式(COUNT、AVG、SUM、MAX、MIN)篩選與排序ORDER BY*/
SELECT ProductID,
COUNT(orderID) AS 下單次數,
AVG(price) AS 單價,
SUM(Quantity) AS 總量,
MAX(Quantity) AS 最高單量,
MIN(Quantity) AS 最低單量
FROM orderTable
/**篩選ProductID */
GROUP BY ProductID
/**排序從第2欄位,將第4欄位降冪排序 */
ORDER BY 2, 4 DESC;
SQL
SELECT LastName,FirstName FROM myTable ORDER BY FirstName;
  1. JOIN 合併 / LEFT JOIN / RIGHT JOIN / FULL JOIN
  2. ON / AND
SQL
SELECT myTable.nameID, orderTable.ProductID
/*合併兩的資料表*/
FROM myTable JOIN orderTable
/*第一個篩選條件當ID相同時*/
ON orderTable.CustomerID=myTable.CustomerID
/*再從第一個篩選條件中比對日期*/
WHERE orderTable.OrderDate >= '2023.07.01'
AND orderTable.OrderDate <= '2023.07.31'

07/12 資料表處理複習與Django安裝

  1. 多檔案參照

    • SELECT tab1.col1, tab1.col2, tab2.col1, tab2.col2
    • FROM tab1 JOIN / LEFT JOIN / RIGHT JOIN tab2

    提醒

    建議使用單邊LEFTRIGHT的JOIN不要混用,保持程式碼的乾淨與不易混亂,。

    • ON tab1.rel_col1 = tab2.rel_col1
    • AND tab1.rel_col2 = tab2.rel_col2
  2. 比較運算元

    • =,<>,>=,>,<=,<
    • IN(col1,col2,..)
    • AND、OR、NOT
    • LIKE、_、%
  3. 別名的重要性 AS

    SQL
    /**在同一份資料表內進行篩選 */
    SELECT a.EmployeeID, a.FirstName, b.EmployeeID,b.FirstName
    FROM employees AS a JOIN employees AS b
    ON a.EmployeeID <> b.EmployeeID
    AND a.HireDate=b.HireDate
    
  4. WHERE條件式欄位搭配 IN / =

    SQL
     SELECT
     DISTINCT order_details.ProductID,
     products.ProductName
     FROM order_details
     JOIN products
     ON order_details.ProductID = products.ProductID
     WHERE
     order_details.UnitPrice = (
         SELECT MAX(UnitPrice)
         FROM order_details
     );
    
    • 子階查找(二階)(順序 : 最終編號查找 > )
    SQL
    /*找出八月10號的接單員工 */
     SELECT *
     FROM employees
     WHERE EmployeeID
     IN(
         /**1.先撈出下單編號 */
     SELECT DISTINCT EmployeeID
     FROM orders
     WHERE OrderDate >='1994-08-01'
     AND OrderDate <='1994-08-10');
     );
    
    • 子階查找(三階)
    SQL
     /*找出八月份下單金額最高的客戶*/
    

    提醒

    • SELECT後直接寫FROM選擇資料表,這樣可以加快顯示 col 的提醒。
    • 順序應由 : 最終資料表比較 > 最終欄位查找 > 第 2 層查找 > 第 1 層查找
    • MySQL 學習筆記
    • 先(SELECT)選擇資料欄位 > 從(FROM)哪個資料表中 > 確認是否要合併(JOIN/LEFT JOIN/RIGHT JOIN)資料表查詢 >接續要比對欄位(ON/AND) >加入計算或運算值 > 最後放入最終的欄位(WHERE)
  5. Django 安裝實作

    • 原地安裝(django-admin startproject projectname . )
    • 新增資料夾安裝(django-admin startproject projectname)

    兩者指令只差在結尾有一個.點,Django會識別projcet name是否要再建立一個資料夾。

07/14 Django觀念與Html基礎

  1. 路徑架構觀念
  2. 相對/絕對路徑(Path)概念
    • 這裡攸關本機與客戶機器對應資料位址的重要性
  3. Django 與 Database 連接設定 (settings.py)

這裡有1個必須修改(ENGINE)5個必須填寫(NAME、HOST、USER、PASSWORD、PORT)的步驟。

py
DATABASES={
   'defualt':{
      'ENGINE':'django.db.backends.mysql',
      'NAME':'DB Name',
      'HOST':'127.0.0.1',
      'USER': 'root',
      'PASSWORD':'PSD',
      'PORT':'3306'
   }
}
  1. Database連接測試 (views)
py
# 先引入db的連接外掛
from django.db import connection
# 在宣告連接資料庫
def index(request):
 req=connection.cursor()
 req.execute('SELECT * FROM tableName ')   
 return HttpResponse(req.fetchall())   

開始使用SQL語言連接資料料庫。

  1. HTML架構觀念
  2. 常用HTML標籤、屬性介紹