中興大學 Python Django網頁App開發基礎班第01期 I
2023/06/28-2023/07/14
06/28 環境設置 :
- 網路結構介紹、資料庫初步介紹、作業環境安裝。
- 資料庫連結 : 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 '身高'
)
留意:
搞定資料表架構才能衍伸後續專案功能。
- NOT NULL與 NULL,表示填表時可否呈現
空白
送出資料。 - DECIMAL ( 6,2 )十進制,表示共6個位數,取小數第2位(1234.56),通常用在
收支欄位
上。 - 注意欄位名稱盡量不要取會與原本SQL的命名類似,避免產生問題。參考 SQL樣式指南 · SQL Style Guide
07/05 資料表處理 :
資料庫(表)架構複習與SQL語法學習
數值 :
- 整數-INT、BIGINT
- 浮點數-固定 : Decimal(長,小)、 不固定 : float
文字 :
- 固定長度- CHAR、
- 不固定長度- VARCHAR
日期 :
- 標準日期-DateTime : 年/月/日 時:分:秒:百分之一秒。
- 短日期-Smalldatetime : 年/月/日 時:分 (容量小的資料庫才會使用,如樹梅派、存放SD卡的資料庫等等)。
舉例 : 課表資料結構
星期
節次一 二 三 四 五 1 國文
張三英文
李四數學
張三體育
張三音樂
李四2 國文
李四數學
李四體育
張三音樂
李四提醒 : 資料表名稱、欄位名稱、資料種類、可否省略 null
sqlCREATE 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 '老師名' )
語法教學 (INSERT新增、UPDATE修改、DELETE):
以下為mytabl表單:
id * (AUTO_INCREMENT) | name (NOT NULL) | tel (NOT NULL) | phone (NULL) |
---|---|---|---|
1 | Evan | 04-5678910 | 0910-234567 |
2 | Hello | 03-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,就會刪除整張內容,僅留資料表
- 刪除整張資料表 :
DROP TABLE 資料表
sql
DROP TABLE mytable
警告
資料一經刪除,將無法復原,請謹慎。
- 建立索引 (Index):
CREATE UNIQUE INDEX 新索引名 ON 資料表 (指定欄位)
- 索引是一種資料的排序、分類,可幫助快速查找、及避免重複資料產生。
- 設定過多索引會使存檔速度變慢,索引檔也會佔儲存空間。
- 兩個方法設定索引:
關鍵/唯一值索引
、一般索引
,兩個僅差在UNIQUE
。
sql
/*關鍵 / 唯一值索引 */
CREATE UNIQUE INDEX new_index ON mytable(id);
sql
/*一般索引 */
CREATE INDEX new_index ON mytable(id);
提醒
- 整張資料表的設計,要先從上到下,還是左到右,是索引的順序,攸關後頭程式設計,須留意。
- 自動產生資料網站: MOKAROO
資料查找 (SELECT) :
SELECT 欄位/全部 FROM 表單
sqlSELECT * FROM mytable; SELECT name,tel FROM mytable;
- 查看時賦予新名稱 (
欄位 AS 新名稱
)
sqlSELECT name AS 名字, tel AS 電話 FROM mytable;
- 篩選掉重複資料 (
DISTINCT
)
sqlSELECT DISTINCT name FROM mytable;
- 查看時賦予新名稱 (
07/07 資料表處理
資料庫(表)架構複習與SQL語法學習
- 選擇
SELECT
- 欄位 / 條件式(欄位)
AS
新欄位名稱 FROM
資料表
SQL
/*顯示更名*/
SELECT FirstName AS 名,LastName AS 姓 FROM myTable;
/*運算式*/
SELECT Price*Quantity AS 總價 FROM orderTable;
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;
JOIN
合併 /LEFT JOIN
/RIGHT JOIN
/FULL JOIN
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安裝
多檔案參照
SELECT
tab1.col1, tab1.col2, tab2.col1, tab2.col2FROM
tab1JOIN
/LEFT JOIN
/RIGHT JOIN
tab2
提醒
建議使用單邊
LEFT
或RIGHT
的JOIN不要混用,保持程式碼的乾淨與不易混亂,。ON
tab1.rel_col1=
tab2.rel_col1AND
tab1.rel_col2=
tab2.rel_col2
比較運算元
=,<>,>=,>,<=,<
IN(col1,col2,..)
AND、OR、NOT
LIKE、_、%
別名的重要性
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
WHERE
條件式欄位搭配IN
/=
SQLSELECT 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)
Django 安裝實作
- 原地安裝(
django-admin startproject projectname .
) - 新增資料夾安裝(
django-admin startproject projectname
)
兩者指令只差在結尾有一個
.
點,Django會識別projcet name是否要再建立一個資料夾。- 原地安裝(
07/14 Django觀念與Html基礎
- 路徑架構觀念
- 相對/絕對路徑(Path)概念
- 這裡攸關本機與客戶機器對應資料位址的重要性
- 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'
}
}
- 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語言連接資料料庫。
- HTML架構觀念
- 常用HTML標籤、屬性介紹