數據庫

數據庫介紹

引題

爲什麼使用數據庫:
之前的學習中我們已經可以存儲數據,變量、讀寫本地文件(txt、csv)。

  1. 持久化。內存中的變量當程序重啓和電腦斷電時丟失數據,而硬盤可以長時間、持久地存儲數據。數據存儲到硬盤上的過程叫持久化。
  2. 數據庫更加專業強大。遠比純文本文檔、excel表格強大,增刪改查和統計函數。

數據庫基本概念

觀察表格、excel表格 ,打開了 學生列表.xls excel表格文檔。類比引入數據庫概念。

  1. 庫 schema:好像整個表格文檔。 好像一個物流公司共佔地100畝,蓋了50個倉庫,A01倉庫負責存儲河南客戶貨物,A02倉庫負責存儲廣州xx項目物料。每一個倉庫對應一個項目。
  2. 表 table:對應excel表格裏sheet1 sheet2。由行內容和列組成。表描述一個類,每一行描述一個對象。
  3. 字段 field:對應表格頭部的 序號、班級、姓名。好像類的屬性。字段裏存儲的值的類型需要事先定義。
  4. 值 value:表格每一行具體存儲的信息。
  5. 主鍵 primary key:類似表格中 序號 這一列。數據庫中這一列會自增並不會重複。
  6. 外鍵 foreign key: 表1學員信息裏一個班級字段引用自另一個表班級信息表的id列。優點易於維護,保持數據一致性。
  7. 範式:描述 智遊學校時,可以把全部信息字段定義到一張表上,也可以分爲學員信息表、班級信息表、課程信息表。劃分維度、信息耦合度可高可低,具體結合業務邏輯分析。

常見數據庫介紹

關係型數據庫:

  1. sqlite:輕量級數據庫。功能基礎簡單,在數據較少情況下性能並不比重型數據庫低。優點,python解釋器內置驅動,無需安裝直接使用,適合初學數據庫。手機應用使用的就是它。
  2. mysql:最流行的數據庫。中型。開源、php流行推動了mysql的流行。
  3. PostgreSQL: 大象數據庫,號稱最先進的數據庫。從大學興起的開源數據庫、架構優秀、功能前衛,數據量很大的時候,性能衰減不明顯。消耗相同硬件資源的情況下性能和穩定性優於mysql數據庫。django odoo等python框架官方推薦使用此數據庫。但是目前市場佔有率還不高。
  4. oracle:地位很高的商用數據庫。昂貴、穩定、功能強大,常與java配合使用。
  5. DB2 sybase MSSQL等,其它的商用數據庫。
  6. access:微軟office套件中包含,輕量,由於數據庫門檻,使用者不多。

no-sql(not only sql)型數據庫:
7. mongodb 存儲單位是文檔,json(類似後端dict)結構整個存進去。數據常放在內存中以獲得查詢性能,定期把數據持久化到硬盤上。
8. redis 鍵值對 “name”=“小明” 。

數據庫字段類型

數據庫創建表示要事先告訴計算機硬盤,每張表的每個字段存什麼類型、將要存儲的內容大還是小。長度過小,內容值存不進去,長度太大,浪費硬盤空間。我們需要選擇合適的類型和長度。
各數據庫字段類型關鍵字基本一致。mysql oracle postgresql常用字段類型如下:

  1. 整數
    整數:常用INT INTEGER 佔4個字節,2**32,可以表示常用範圍整數。
    (不常用)TINYINT(1字節) SMALLINT(2字節) MEDIUMINT(3字節)
    BIGINT(8字節) 適用身份證號、VIP號碼比較長的編號。
  2. 浮點數
    常用 FLOAT(4字節) 單精度小數 。 即使是單精度,範圍也不小。
    DOUBLE(8字節) 雙精度小數。
    場景 金錢計算,軌道計算。
  3. 字符串
    CHAR char(10) 可以存儲長度(字節長度)不超過10的字符串。例如"hello"。但由於長度按照字節判斷,存unicode編碼的中文只能存3個。
    常用 VARCHAR 0-65535字節,variable char 可變字符串。VARCHAR(5) 可以存儲5箇中文或5個英文字母。場景 用戶名、家庭住址。
    TEXT TINYTEXT medium longtext , 場景 大文本存儲,書籍文章、用戶反饋。
    BLOB medium longblob ,二進制文件, 場景 圖片、視頻。但一般不在數據庫中存儲圖片和視頻,因爲會增加數據庫的計算壓力和帶寬傳輸壓力和備份還原的難度和用戶信息靜態資源耦合到一起,解決方案是 圖片視頻存到普通文件目錄下,數據庫中存儲文件路徑。
  4. 日期
    DATE 日期, 形如"2018-11-08"
    常用 DATETIME 日期時間, “2018-11-08 16:52:30” “2018-11-08 16:52:30.123” “2018-11-08 16:52:30 GTM+8”
    常用 TIMESTAMP 時間戳, 1541667270 1541667270.7252207 1541667270725

sqlite的字段比較簡化:
INTEGER 整數
REAL 浮點數
TEXT 字符串
NULL 什麼都不存

SQL

structured query language 結構化查詢語言。專門對數據庫進行查找、增加、修改、刪除、統計的操作語言。
CURD 增刪查改 create update retrieve delete。
書寫風格,關鍵字大小寫都行,建議大寫。表名大小寫都行,但是在一些數據庫中不區分大小寫,建議小寫。

(重要)基本語法。

  1. 查找
    SELECT 字段1,字段2,字段3,… FROM 表名; python中返回值形如[(1, 502班, 小明, 男), (), ()]。
    字段比較多時簡寫爲 SELECT * FROM 表名; 由於數據庫執行時會把*轉換爲字段再執行,性能極微小下降。
    SELECT * FROM 表名 WHERE 字段1 = 過濾值,字典2=過濾值 ; where限定條件查找。
  2. 添加
    INSERT 字段1,字段2,… INTO 表名 VALUES (1, “小明”, “男”);
    簡寫 INSERT INTO 表名 VALUES (1, “小明”, “男”);
  3. 修改
    UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 過濾值;
    注意沒有where條件限定行的話將會更新整張表。
  4. 刪除
    DELETE FROM 表名; 注意會刪除整張表。
    DELETE FROM 表名 WHERE 字段1 = 過濾值; 限定條件刪除某些行。
  5. 創建表
    CREATE TABLE 表名 {
    字段類型 字段名 其它關鍵字(主鍵 備註),
    INT id PRIMARY KEY,
    VARCHAR(20) username ,
    }

數據庫介紹

引題

爲什麼使用數據庫:
之前的學習中我們已經可以存儲數據,變量、讀寫本地文件(txt、csv)。

  1. 持久化。內存中的變量當程序重啓和電腦斷電時丟失數據,而硬盤可以長時間、持久地存儲數據。數據存儲到硬盤上的過程叫持久化。
  2. 數據庫更加專業強大。遠比純文本文檔、excel表格強大,增刪改查和統計函數。

數據庫基本概念

觀察表格、excel表格 ,打開了 學生列表.xls excel表格文檔。類比引入數據庫概念。

  1. 庫 schema:好像整個表格文檔。 好像一個物流公司共佔地100畝,蓋了50個倉庫,A01倉庫負責存儲河南客戶貨物,A02倉庫負責存儲廣州xx項目物料。每一個倉庫對應一個項目。
  2. 表 table:對應excel表格裏sheet1 sheet2。由行內容和列組成。表描述一個類,每一行描述一個對象。
  3. 字段 field:對應表格頭部的 序號、班級、姓名。好像類的屬性。字段裏存儲的值的類型需要事先定義。
  4. 值 value:表格每一行具體存儲的信息。
  5. 主鍵 primary key:類似表格中 序號 這一列。數據庫中這一列會自增並不會重複。
  6. 外鍵 foreign key: 表1學員信息裏一個班級字段引用自另一個表班級信息表的id列。優點易於維護,保持數據一致性。
  7. 範式:描述 智遊學校時,可以把全部信息字段定義到一張表上,也可以分爲學員信息表、班級信息表、課程信息表。劃分維度、信息耦合度可高可低,具體結合業務邏輯分析。

常見數據庫介紹

關係型數據庫:

  1. sqlite:輕量級數據庫。功能基礎簡單,在數據較少情況下性能並不比重型數據庫低。優點,python解釋器內置驅動,無需安裝直接使用,適合初學數據庫。手機應用使用的就是它。
  2. mysql:最流行的數據庫。中型。開源、php流行推動了mysql的流行。
  3. PostgreSQL: 大象數據庫,號稱最先進的數據庫。從大學興起的開源數據庫、架構優秀、功能前衛,數據量很大的時候,性能衰減不明顯。消耗相同硬件資源的情況下性能和穩定性優於mysql數據庫。django odoo等python框架官方推薦使用此數據庫。但是目前市場佔有率還不高。
  4. oracle:地位很高的商用數據庫。昂貴、穩定、功能強大,常與java配合使用。
  5. DB2 sybase MSSQL等,其它的商用數據庫。
  6. access:微軟office套件中包含,輕量,由於數據庫門檻,使用者不多。

no-sql(not only sql)型數據庫:
7. mongodb 存儲單位是文檔,json(類似後端dict)結構整個存進去。數據常放在內存中以獲得查詢性能,定期把數據持久化到硬盤上。
8. redis 鍵值對 “name”=“小明” 。

數據庫字段類型

數據庫創建表示要事先告訴計算機硬盤,每張表的每個字段存什麼類型、將要存儲的內容大還是小。長度過小,內容值存不進去,長度太大,浪費硬盤空間。我們需要選擇合適的類型和長度。
各數據庫字段類型關鍵字基本一致。mysql oracle postgresql常用字段類型如下:

  1. 整數
    整數:常用INT INTEGER 佔4個字節,2**32,可以表示常用範圍整數。
    (不常用)TINYINT(1字節) SMALLINT(2字節) MEDIUMINT(3字節)
    BIGINT(8字節) 適用身份證號、VIP號碼比較長的編號。
  2. 浮點數
    常用 FLOAT(4字節) 單精度小數 。 即使是單精度,範圍也不小。
    DOUBLE(8字節) 雙精度小數。
    場景 金錢計算,軌道計算。
  3. 字符串
    CHAR char(10) 可以存儲長度(字節長度)不超過10的字符串。例如"hello"。但由於長度按照字節判斷,存unicode編碼的中文只能存3個。
    常用 VARCHAR 0-65535字節,variable char 可變字符串。VARCHAR(5) 可以存儲5箇中文或5個英文字母。場景 用戶名、家庭住址。
    TEXT TINYTEXT medium longtext , 場景 大文本存儲,書籍文章、用戶反饋。
    BLOB medium longblob ,二進制文件, 場景 圖片、視頻。但一般不在數據庫中存儲圖片和視頻,因爲會增加數據庫的計算壓力和帶寬傳輸壓力和備份還原的難度和用戶信息靜態資源耦合到一起,解決方案是 圖片視頻存到普通文件目錄下,數據庫中存儲文件路徑。
  4. 日期
    DATE 日期, 形如"2018-11-08"
    常用 DATETIME 日期時間, “2018-11-08 16:52:30” “2018-11-08 16:52:30.123” “2018-11-08 16:52:30 GTM+8”
    常用 TIMESTAMP 時間戳, 1541667270 1541667270.7252207 1541667270725

sqlite的字段比較簡化:
INTEGER 整數
REAL 浮點數
TEXT 字符串
NULL 什麼都不存

SQL

structured query language 結構化查詢語言。專門對數據庫進行查找、增加、修改、刪除、統計的操作語言。
CURD 增刪查改 create update retrieve delete。
書寫風格,關鍵字大小寫都行,建議大寫。表名大小寫都行,但是在一些數據庫中不區分大小寫,建議小寫。

(重要)基本語法。

  1. 查找
    SELECT 字段1,字段2,字段3,… FROM 表名; python中返回值形如[(1, 502班, 小明, 男), (), ()]。
    字段比較多時簡寫爲 SELECT * FROM 表名; 由於數據庫執行時會把*轉換爲字段再執行,性能極微小下降。
    SELECT * FROM 表名 WHERE 字段1 = 過濾值,字典2=過濾值 ; where限定條件查找。
  2. 添加
    INSERT 字段1,字段2,… INTO 表名 VALUES (1, “小明”, “男”);
    簡寫 INSERT INTO 表名 VALUES (1, “小明”, “男”);
  3. 修改
    UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 過濾值;
    注意沒有where條件限定行的話將會更新整張表。
  4. 刪除
    DELETE FROM 表名; 注意會刪除整張表。
    DELETE FROM 表名 WHERE 字段1 = 過濾值; 限定條件刪除某些行。
  5. 創建表
    CREATE TABLE 表名 {
    字段類型 字段名 其它關鍵字(主鍵 備註),
    INT id PRIMARY KEY,
    VARCHAR(20) username ,
    }

數據庫介紹

引題

爲什麼使用數據庫:
之前的學習中我們已經可以存儲數據,變量、讀寫本地文件(txt、csv)。

  1. 持久化。內存中的變量當程序重啓和電腦斷電時丟失數據,而硬盤可以長時間、持久地存儲數據。數據存儲到硬盤上的過程叫持久化。
  2. 數據庫更加專業強大。遠比純文本文檔、excel表格強大,增刪改查和統計函數。

數據庫基本概念

觀察表格、excel表格 ,打開了 學生列表.xls excel表格文檔。類比引入數據庫概念。

  1. 庫 schema:好像整個表格文檔。 好像一個物流公司共佔地100畝,蓋了50個倉庫,A01倉庫負責存儲河南客戶貨物,A02倉庫負責存儲廣州xx項目物料。每一個倉庫對應一個項目。
  2. 表 table:對應excel表格裏sheet1 sheet2。由行內容和列組成。表描述一個類,每一行描述一個對象。
  3. 字段 field:對應表格頭部的 序號、班級、姓名。好像類的屬性。字段裏存儲的值的類型需要事先定義。
  4. 值 value:表格每一行具體存儲的信息。
  5. 主鍵 primary key:類似表格中 序號 這一列。數據庫中這一列會自增並不會重複。
  6. 外鍵 foreign key: 表1學員信息裏一個班級字段引用自另一個表班級信息表的id列。優點易於維護,保持數據一致性。
  7. 範式:描述 智遊學校時,可以把全部信息字段定義到一張表上,也可以分爲學員信息表、班級信息表、課程信息表。劃分維度、信息耦合度可高可低,具體結合業務邏輯分析。

常見數據庫介紹

關係型數據庫:

  1. sqlite:輕量級數據庫。功能基礎簡單,在數據較少情況下性能並不比重型數據庫低。優點,python解釋器內置驅動,無需安裝直接使用,適合初學數據庫。手機應用使用的就是它。
  2. mysql:最流行的數據庫。中型。開源、php流行推動了mysql的流行。
  3. PostgreSQL: 大象數據庫,號稱最先進的數據庫。從大學興起的開源數據庫、架構優秀、功能前衛,數據量很大的時候,性能衰減不明顯。消耗相同硬件資源的情況下性能和穩定性優於mysql數據庫。django odoo等python框架官方推薦使用此數據庫。但是目前市場佔有率還不高。
  4. oracle:地位很高的商用數據庫。昂貴、穩定、功能強大,常與java配合使用。
  5. DB2 sybase MSSQL等,其它的商用數據庫。
  6. access:微軟office套件中包含,輕量,由於數據庫門檻,使用者不多。

no-sql(not only sql)型數據庫:
7. mongodb 存儲單位是文檔,json(類似後端dict)結構整個存進去。數據常放在內存中以獲得查詢性能,定期把數據持久化到硬盤上。
8. redis 鍵值對 “name”=“小明” 。

數據庫字段類型

數據庫創建表示要事先告訴計算機硬盤,每張表的每個字段存什麼類型、將要存儲的內容大還是小。長度過小,內容值存不進去,長度太大,浪費硬盤空間。我們需要選擇合適的類型和長度。
各數據庫字段類型關鍵字基本一致。mysql oracle postgresql常用字段類型如下:

  1. 整數
    整數:常用INT INTEGER 佔4個字節,2**32,可以表示常用範圍整數。
    (不常用)TINYINT(1字節) SMALLINT(2字節) MEDIUMINT(3字節)
    BIGINT(8字節) 適用身份證號、VIP號碼比較長的編號。
  2. 浮點數
    常用 FLOAT(4字節) 單精度小數 。 即使是單精度,範圍也不小。
    DOUBLE(8字節) 雙精度小數。
    場景 金錢計算,軌道計算。
  3. 字符串
    CHAR char(10) 可以存儲長度(字節長度)不超過10的字符串。例如"hello"。但由於長度按照字節判斷,存unicode編碼的中文只能存3個。
    常用 VARCHAR 0-65535字節,variable char 可變字符串。VARCHAR(5) 可以存儲5箇中文或5個英文字母。場景 用戶名、家庭住址。
    TEXT TINYTEXT medium longtext , 場景 大文本存儲,書籍文章、用戶反饋。
    BLOB medium longblob ,二進制文件, 場景 圖片、視頻。但一般不在數據庫中存儲圖片和視頻,因爲會增加數據庫的計算壓力和帶寬傳輸壓力和備份還原的難度和用戶信息靜態資源耦合到一起,解決方案是 圖片視頻存到普通文件目錄下,數據庫中存儲文件路徑。
  4. 日期
    DATE 日期, 形如"2018-11-08"
    常用 DATETIME 日期時間, “2018-11-08 16:52:30” “2018-11-08 16:52:30.123” “2018-11-08 16:52:30 GTM+8”
    常用 TIMESTAMP 時間戳, 1541667270 1541667270.7252207 1541667270725

sqlite的字段比較簡化:
INTEGER 整數
REAL 浮點數
TEXT 字符串
NULL 什麼都不存

SQL

structured query language 結構化查詢語言。專門對數據庫進行查找、增加、修改、刪除、統計的操作語言。
CURD 增刪查改 create update retrieve delete。
書寫風格,關鍵字大小寫都行,建議大寫。表名大小寫都行,但是在一些數據庫中不區分大小寫,建議小寫。

(重要)基本語法。

  1. 查找
    SELECT 字段1,字段2,字段3,… FROM 表名; python中返回值形如[(1, 502班, 小明, 男), (), ()]。
    字段比較多時簡寫爲 SELECT * FROM 表名; 由於數據庫執行時會把*轉換爲字段再執行,性能極微小下降。
    SELECT * FROM 表名 WHERE 字段1 = 過濾值,字典2=過濾值 ; where限定條件查找。
  2. 添加
    INSERT 字段1,字段2,… INTO 表名 VALUES (1, “小明”, “男”);
    簡寫 INSERT INTO 表名 VALUES (1, “小明”, “男”);
  3. 修改
    UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 過濾值;
    注意沒有where條件限定行的話將會更新整張表。
  4. 刪除
    DELETE FROM 表名; 注意會刪除整張表。
    DELETE FROM 表名 WHERE 字段1 = 過濾值; 限定條件刪除某些行。
  5. 創建表
    CREATE TABLE 表名 {
    字段類型 字段名 其它關鍵字(主鍵 備註),
    INT id PRIMARY KEY,
    VARCHAR(20) username ,
    }

import sqlite3
connect = sqlite3.connect(“testsqlite.db”)
cursor = connect.cursor()
cursor.execute("""
SELECT id,name from student;
“”")
student_list = cursor.fetchall()
print(student_list)

cursor.execute("""
SELECT * FROM student WHERE name=“小明”;
“”")
student = cursor.fetchone()
print(student)

cursor.execute("""
SELECT * FROM student WHERE id=0;
“”")
student2 = cursor.fetchone()
print(student2)

cursor.execute("""
SELECT * FROM student WHERE id>0;
“”")

student_list3 = cursor.fetchall()

student3 = cursor.fetchone()

print(student_list3)

print(f’學生姓名是 {student3[1]}’)

print(‘學生姓名是{} 性別{} 住址{} 電話{}’.format(student3[‘name’], student3[2], ))

cursor.execute("""
UPDATE student SET name=“大紅” WHERE id=3;
“”")
connect.commit()
cursor.execute(""" select * from student; “”")
print(cursor.fetchall())

cursor.close()
connect.close()

“”"
cursor.fetchall() 取回結果集,形如[(1, ‘小王’), (2, ‘小明’)] 大列表,列表每一項是元組、是一行,元組裏的每一項對應每一列的值。結果空返回[]。
cursor.fetchone() 取回一條數據,形如 (2, ‘小明’) 。結果空返回None類型。如果select符合多條,返回多條結果裏的第一條。

cursor.fetchxxx() 方法爲了節省內存和速度採用了生成器結構,只能取一次。
“”"

“”"
sql基礎語法補充:

  1. 主鍵:一張表一般都有一列主鍵,主鍵primary key一般名叫 id,字段類型一般爲自增整數。當insert行內容時,sql語句可以不插入id列,數據庫會幫你自動插入並自增auto increase。
    主鍵不能重複。主鍵好處是確保數據一致性、方便查詢。如果一列爲主鍵,那麼必然非空not null和唯一unique。
    2.如果工作中一個數據庫連接實例下有多個庫,那麼表名要帶上命名空間,例如main.student。
    3.丟棄表 drop。跟delete關鍵字相比更爲嚴重,delete刪除某行或清空表內容 表結構還在。而drop是完全刪除丟棄整個表,內容和結構都刪除。 drop table [表名]。
    4.字段被雙引號括住 ,形如SELECT “id”, “name” FROM student; ,結果一樣。好處是避免數據庫關鍵字導致的錯誤。當數據庫解釋器遇到引號時,會認爲引號裏的名字就是用戶自定義的字段名而不是內置關鍵字。平時省事可以不加引號。

數據庫概念補充:
數據庫的大概原理:數據按樹形結構存儲,查找數據時只需比對幾次就能查出來。數據量增大時,查詢時間成對數慢速增長。
索引:index,目錄。索引會佔據一定存儲空間,在數據庫中以樹型數據結構存儲,建立的是目錄到硬盤存儲的數據的映射。就好像平時看的書籍。創建主鍵的那一列會自動創建索引。一般在查詢經常比較的字段上創建索引(如id列、phone列)。優點大幅提高select查詢效率。缺點是佔據更多的硬盤空間。
事務:transaction。 當有多句sql語句的時候,例如sql1 插入銀行交易表一行數據金額100元、sql2 修改剛纔插入的一行數據的金額爲98元,但執行sql1的時候由於用戶擁堵等原因執行失敗,這時再執行sql2必然錯誤或誤修改其它的正常數據。爲了避免這種情況,把這兩句sql都放入一個事務執行,只要一個事務中任意一條sql執行失敗,那麼其它已執行的sql會回到修改前狀態(回滾rolling),只有當所有sql都執行成功,纔會一起commit生效。簡單來說,事務要麼都執行,要麼出錯都不行。優點 保證數據一致性。
“”"

學生管理V4 sqlite版

import sqlite3
def create_table():
connect = sqlite3.connect(“testsqlite.db”)
cursor = connect. cursor()
cursor.execute("""
CRDEATE TABLE students
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
sex TEXT,
age INTEGER,
phone TXET
)
“”")
connect.commit()
cursor.close()
connect.close()

def show_students():
print(‘行號\t\t姓名\t\t年齡\t\t性別\t\t電話\t\t’)
print("-----------------------------------------------------")
connect = sqlite3.connect(“testsqlite.db”)
cursor = connect.cursor()
cursor.execute("""
SELECT * FROM students;
“”")
student_list =cursor.fetchall()
for index,student in enumerate(student_list):
print(f’{index+1}\t\t{studeng[1]}\t\t{student[2]}\t\t{student[3]}\t\t{student[4]}’)
cursorr.close()
connect.clos()

def add_student():
name =input(’新學生姓名:’)
sex = input('新學生性別:’)
age = input('新學生年齡:‘)
phone = input('新學生電話:’)

connect = sqlite3.connect("testsqlite.db")
cursor = connect.cursor()

sql = f"""
		 INSERT INTO students(name,sex,age,phone) VALUES("{name}”,“{sex}",{age},"{phone}");
		 """
		 
 cursorr.execute(sql)
 connect.commit()
 connect.close()
 print('新學生添加成功‘)

def update_student():
# 數據庫設計 應該多一列 學生編號。id列面向數據庫爲了安全不適合向用戶展示。行號每一次不固定。
stu_name = input(‘要修改哪個學生?學生姓名:’)
new_phone = input(‘修改後的學生電話:’)

connect = sqlite3.connect("testsqlite.db")
cursor = connect.cursor()
# 先查詢輸入的學生是否存在,存在的話更新,不存在的給出用戶提示
sql = f"""
    SELECT 1 FROM students WHERE name="{stu_name}";
"""
cursor.execute(sql)
student = cursor.fetchall()
if student:
    sql2 = f"""
            UPDATE students SET phone="{new_phone}" WHERE name="{stu_name}";
        """
    # print(sql2)
    cursor.execute(sql2)
    connect.commit()
else:
    print('學生姓名不存在,請重新操作。')
connect.close()

print('學生修改成功')

def delete_student():
sub_select = input("""
刪除>請選擇刪除子操作
1.按學生姓名刪除
2.全部刪除
“”")
if sub_select == ‘1’:
stu_name = input(‘要刪除的學生姓名:’)
“”" delete from students where name=’{stu_name}’ “”"
elif sub_select == ‘2’:
“”" delete from students;"""
confirm = input(‘要刪除全部學生?(Y/N):’)
if confirm == ‘Y’:
# cursor.execute()
pass

def main():
# 主函數,程序入口
while True:
print("""
歡迎使用學生管理系統
1-查看學員姓名
2-添加學員姓名
3-修改學員姓名
4-刪除學員姓名
0-退出程序
“”")

    num = int(input('請輸入操作編號:'))

    if num == 1:
        show_students()
    elif num == 2:
        add_student()
    elif num == 3:
        update_student()
    elif num == 4:
        delete_student()
    elif num == 0:
        break

if name == ‘main’:
# create_table()
main()

可能出現的錯誤:

插入功能

sql = “”"

INSERT INTO students (name, sex, age, phone) VALUES (%s, %s, %d, %s);

“”" % (name, sex, int(age), phone)

print(sql)

報錯 sqlite3.OperationalError: no such column: aaa

原因 sql INSERT INTO students (name, sex, age, phone) VALUES (aaa, nan, 13, 13000); 值並不是sql解釋器理解的字符串。

解決 %s兩側加引號。 INSERT INTO students (name, sex, age, phone) VALUES ("%s", %s, %d, %s) % (name, sex, int(age), phone);

sql補充

SELECT 1 FROM students WHERE name="{stu_name}"; – 只關心一行數據是否存在。效率比select * 高。

##debug

pdb包示例

import pdb # python debug包

def test(arg):

pdb.set_trace() # 設置跟蹤

for i in range(arg):

print(i)

return arg

pdb.run(“test(3)”)

“”"
斷點:debug運行到某一句代碼時暫時停住。一句一句向下執行太慢,我們只需要在可能出現問題的代碼前設置斷點。

  1. 打斷點。運行程序
  2. (Pdb)模式下 輸入 “c" 回車,程序會執行到第一個斷點處。 信息提示,運行到第幾行,在哪個函數哪個文件下。
  3. (Pdb)模式下 輸入 “s" 回車,向下執行一句代碼
  4. (Pdb)模式下 輸入 “a" 回車,查看相關變量的值。

debug好處:代碼一句一句執行,不斷查看變量的值,爲編程提供信息支持。
pdb缺點:打斷點不方便,命令行調試不方便。
“”"

“”"
爲了使debug更加方便,pycharm提供了圖形化工具。

  1. 編輯器左側行號區域,單擊設置斷點
  2. 以debug模式運行。
    “”"

def test2(arg):
for i in range(arg):
print(i)
return arg

test2(10)

def test3():
test2(10)
print(‘world’)
print(‘world’)
print(‘world’)
test3()

“”"
可能出現的錯誤:

  1. no module pytest 。 CPython錯誤。
    pip install pytest
    或重裝python解釋器
  2. win32 錯誤
    pip install pywin32
    最好安裝主流操作系統 win7x64 win10x64
    “”"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章