sqlite基本原理介紹與操作
sqlite 基本介紹
引題
為什麼使用資料庫:
之前的學習中,我們已經可以儲存資料,變數,讀寫本地檔案(txt,csv).
1. 持久化,記憶體中的變數當程式重啟和電腦斷電丟失資料,而硬碟可以長時間,持久地儲存資料,資料儲存到硬碟上的過程叫持久化,
2資料庫更加專業強大。遠比純文字文件、excel表格強大,增刪改查和統計函式。
資料庫基本概念
觀察表格、excel表格 ,打開了 學生列表.xls excel表格文件。類比引入資料庫概念。
庫 schema:好像整個表格文件。 好像一個物流公司共佔地100畝,蓋了50個倉庫,A01倉庫負責儲存河南客戶貨物,A02倉庫負責儲存廣州xx專案物料。每一個倉庫對應一個專案。
表 table:對應excel表格裡sheet1 sheet2。由行內容和列組成。表描述一個類,每一行描述一個物件。
欄位 field:對應表格頭部的 序號、班級、姓名。好像類的屬性。欄位裡儲存的值的型別需要事先定義。
值 value:表格每一行具體儲存的資訊。
主鍵 primary key:類似表格中 序號 這一列。資料庫中這一列會自增並不會重複。
外來鍵 foreign key: 表1學員資訊裡一個班級欄位引用自另一個表班級資訊表的id列。優點易於維護,保持資料一致性。
正規化:描述 智遊學校時,可以把全部資訊欄位定義到一張表上,也可以分為學員資訊表、班級資訊表、課程資訊表。劃分維度、資訊耦合度可高可低,具體結合業務邏輯分析。
常見資料庫介紹
關係型資料庫:
sqlite:輕量級資料庫。功能基礎簡單,在資料較少情況下效能並不比重型資料庫低。優點,python直譯器內建驅動,無需安裝直接使用,適合初學資料庫。手機應用使用的就是它。
mysql:最流行的資料庫。中型。開源、php流行推動了mysql的流行。
PostgreSQL: 大象資料庫,號稱最先進的資料庫。從大學興起的開源資料庫、架構優秀、功能前衛,資料量很大的時候,效能衰減不明顯。消耗相同硬體資源的情況下效能和穩定性優於mysql資料庫。django odoo等python框架官方推薦使用此資料庫。但是目前市場佔有率還不高。
oracle:地位很高的商用資料庫。昂貴、穩定、功能強大,常與java配合使用。
DB2 sybase MSSQL等,其它的商用資料庫。
access:微軟office套件中包含,輕量,由於資料庫門檻,使用者不多。
no-sql(not only sql)型資料庫:
7. mongodb 儲存單位是文件,json(類似後端dict)結構整個存進去。資料常放在記憶體中以獲得查詢效能,定期把資料持久化到硬碟上。
8. redis 鍵值對 “name”=“小明” 。
資料庫欄位型別
資料庫建立表示要事先告訴計算機硬碟,每張表的每個欄位存什麼型別、將要儲存的內容大還是小。長度過小,內容值存不進去,長度太大,浪費硬碟空間。我們需要選擇合適的型別和長度。
各資料庫欄位型別關鍵字基本一致。mysql oracle postgresql常用欄位型別如下:
整數
整數:常用INT INTEGER 佔4個位元組,2**32,可以表示常用範圍整數。
(不常用)TINYINT(1位元組) SMALLINT(2位元組) MEDIUMINT(3位元組)
BIGINT(8位元組) 適用身份證號、VIP號碼比較長的編號。
浮點數
常用 FLOAT(4位元組) 單精度小數 。 即使是單精度,範圍也不小。
DOUBLE(8位元組) 雙精度小數。
場景 金錢計算,軌道計算。
字串
CHAR char(10) 可以儲存長度(位元組長度)不超過10的字串。例如"hello"。但由於長度按照位元組判斷,存unicode編碼的中文只能存3個。
常用 VARCHAR 0-65535位元組,variable char 可變字串。VARCHAR(5) 可以儲存5箇中文或5個英文字母。場景 使用者名稱、家庭住址。
TEXT TINYTEXT medium longtext , 場景 大文字儲存,書籍文章、使用者反饋。
BLOB medium longblob ,二進位制檔案, 場景 圖片、視訊。但一般不在資料庫中儲存圖片和視訊,因為會增加資料庫的計算壓力和頻寬傳輸壓力和備份還原的難度和使用者資訊靜態資源耦合到一起,解決方案是 圖片視訊存到普通檔案目錄下,資料庫中儲存檔案路徑。
日期
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。
書寫風格,關鍵字大小寫都行,建議大寫。表名大小寫都行,但是在一些資料庫中不區分大小寫,建議小寫。
(重要)基本語法。
查詢
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, “小明”, “男”);
修改
UPDATE 表名 SET 欄位1=新值,欄位2=新值 WHERE 欄位1 = 過濾值;
注意沒有where條件限定行的話將會更新整張表。
刪除
DELETE FROM 表名; 注意會刪除整張表。
DELETE FROM 表名 WHERE 欄位1 = 過濾值; 限定條件刪除某些行。
建立表
CREATE TABLE 表名 {
欄位型別 欄位名 其它關鍵字(主鍵 備註),
INT id PRIMARY KEY,
VARCHAR(20) username
測試
===
通過sql或圖形化工具建立一個僱員表employee ,欄位 id 整數 主鍵 自增、name姓名 字串、sex性別 字串、phone聯絡方式 字串。
插入一些測試資料。 (張三,男,1373333333)(小明,男,136000000)(小紅,女,None)
寫py指令碼,將employee表中資料全部查出。
查出所有性別男資料
更新小紅電話為 13811111111
張三離職,刪除姓名=張三 電話=1373333333 的一行。
假刪除
修改表,增加欄位 address辦公地點 字串。更新程式碼,修改所有人辦公地點都為“智遊314教室”
已知cursor.description() 可以獲取到表字段的名字,
import sqlite3
connect = sqlite3.connect(“testsqlite.db”)
cursor = connect.cursor()
cursor.execute("""
UPDATE employee SET phone=138111111 where name = “小紅”
“”")
# cursor.execute("""
# DELETE FROM employee where name = “張三”, phone=138111111222;
# “”")
# 假性刪除,為了防止資料誤刪和方便找回。專門新建一個標識欄位表示使用者狀態(正常、登出)
cursor.update("""
UPDATE employee SET del_flag=1 WHERE name=“小紅”;
“”")
connect.commit()
cursor.execute("""
SELECT * FROM employee WHERE del_flag=0;
“”")
connect.close()
(瞭解)datagrip操作方法(pycharm整合database工具為例子):
pycharm左下角圖示調出工具欄,開啟pycharm右側Database工具。
點加號-DataSource資料來源-sqlite 。
彈出的對話方塊選擇 drivers-sqlite(Xerial)
點選download sqlite-jdbc[latest]
如果網速不好的話 下載sqlite-jdbc-3.20.1.jar 。對話方塊+號-custom jars 從本地安裝
驅動安裝成功後點擊apply應用
點選對話方塊 project data source ,開始配置連線資料庫的例項
File路徑點選 …圖示,選擇要連線的.db檔案。
點test connection, seccessful為成功
點選ok退出。看到連線的資料庫例項下有表。
瀋陽專業治療皰疹醫院:http://www.sdjk99.com/
瀋陽性病醫院哪家好:http://yyk.39.net/sy/zhuanke/fc844.html