數據庫大概原理: 數據按樹型結構存儲,查找數據時只需比對幾次就能查出來。數據量增大時,查詢時間成對數慢速增長。
1. 爲什麼使用數據庫?
- 持久化。內存中的變量當程序重啓和電腦斷電時丟失數據,而硬盤可以長時間、持久的存儲數據。數據存儲到硬盤上的過程叫持久化。
- 數據庫更加專業強大。 遠比純文本文檔、excel表格強大,增刪改查和統計數據
庫(scheme)、表(table)、字段(field)、值(value)、主鍵(primary key)、外鍵(foreign key)。
2. 常見數據庫介紹
- sqlite:輕量級數據庫。功能基礎簡單,在數據較少情況下性能並不比重型數據庫低。優點 python解釋器內置驅動,無需安裝直接使用,適合初學數據庫。手機應用使用的就是它。
- mysql:最流行的數據庫。中型。開源、php流行推動了mysql的流行
- PostgreSQL:大象數據庫,號稱最先進的數據庫。從大學興起的開源數據庫、架構優秀、功能前衛,數據量很大的時候,性能衰減不明顯。消耗相同硬件資源的情況下性能和穩定性優於mysql數據庫。django odoo等python框架官方推薦使用此數據庫。但是目前市場佔有率還不高。
- oracle:地位很高的商業數據庫。昂貴、穩定、功能強大,常與java配合使用。
- DB2 sybase MSSQL等,其他的商用數據庫。
- access:微軟office套件中包含,輕量,由於數據庫門檻,使用者不多。
no-sql(no only sql)型數據庫:
- mongodb 存儲單位是文檔,json(類似後端dict)結構整個存進去。數據常放在內存中以獲得查詢性能,定期把數據持久化到硬盤上。
- redis 鍵值對“name”=“小明”,
- 常見的數據庫字段類型
- 數值、整數
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"
TIMESTAMP(常用) 時間戳,1541667270 1541667270。7252207 1541667270725
- 數值、整數
sqlite的字段比較簡化:
INTEGER 整數
REAL 浮點數
TEXT 字符串
NULL 什麼都不存
SQL
structured query language 結構化查詢語言。專門對數據庫進行查找、增加、修改、刪除、統計的操作語言。
CURD增刪查改 create update retrieve delete
風格:關鍵字大小寫都行,建議大寫。表名大小寫都行,但是在一些數據庫中不區分大小寫,建議小寫。
(重要)基本語法:
import sqlite3
connect = sqlite3.connect("student.db")
cursor = connect.cursor()
1. 創建表
CREATE TABLE student{
id INT PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
}
2. 添加
INSERT INTO student(id, name) VALUES (1, "小紅")
3. 修改
UPDATE student SET name="小紅" WHERE id=12;
UPDATE student SET name="小紅" ---如果沒有限定條件,會修改整個name的名字
4. 查詢
SELECT * FROM student WHERE name="小紅"; --返回某一學生
SELECT * FROM student WHERE id=2; --返回某一學生
select id,name from student;==SELECT "id","name" FROM student;
5. 刪除
DELETE FROM student WHERE --刪除數據庫的某一項
DELETE FROM student; --刪除student數據庫
drop table student; --- 刪除所有數據庫
connect.commit()
cursor.close()
connect.close()
-
一張表一般都有一列主鍵,主鍵primary key一般名叫 id,字段類型一般爲自增整數。當主鍵不能重複。主鍵好處是確保數據一致性、方便查詢。如果一列爲主鍵,那麼必然非空not null 和唯一unique。
-
如果工作中一個數據庫連接實例下有多個庫,那麼表名要帶上命名空間,例如 main.student.
-
字段被雙引號括住,形如SELECT “id”, “name” FROM student;, 結果一樣。好處是避免數據庫關鍵字導致的錯誤。當數據庫解釋器遇到引號時,會認爲引號裏的名字就是用戶自定義的字段名 而不是內置關鍵字,平時省事不需加引號
-
丟棄表 drop。跟delete關鍵字相比更爲嚴重,delete刪除某行或清空表內容 表結構還在.而drop是完全刪除,丟棄整個表,內容和結構都刪除。 drop table [表名]。
-
cursor.fetchall() 取回結果集,形如[(1, ‘小明’),(2, ‘小紅’)] 大列表,列表每一項是元組、是一行,元組裏的每一項對應每一列的值。結果空返回[]。
-
cursor.fetchone() 取出一條數據,形如(1,‘小明’)。結果空返回None類型。 如果select符合多條,返回多條結果裏的第一條。
cursor.fetchxxx() 方法爲了節省內存和速度採用了 生成器結構,只能取一次
數據庫圖像管理工具
常用數據庫圖像管理工具:
1. navicat系列 — > navicat for sqlite
優點:navicatForMysql用戶多,表多的時候界面方便,缺點:1. 付費 2.體驗一般
2. datagrip —> jetbrains出品,
優點:一個軟件連接多個數據庫;操作習慣跟pycharm類;pycharm pro集成。缺點:用戶少 優點:一個軟件連接多個數據庫;操作習慣跟
3. pycharm類; —> pycharm pro集成。
缺點:用戶少
(瞭解)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退出。看到連接的數據庫實例下有表。
database工具使用:
展開目錄,找到 表。
schemas 模型,理解爲大的倉庫,默認有一個倉庫main,main倉庫下是我們建的表。
sqlite masters是數據庫系統內置表,不用關注,不能刪除。
不用關注collations文件夾。
雙擊表 查看錶數據。
圖形化界面 加減號增加修改數據,注意修改完需要submit提交。
點擊console圖標,打開sql命令行工具,可以在裏面寫sql語句,點擊execute按鈕執行,得到結果集。
選中庫,右鍵new-table,可視化界面的創建表。
工具是會自動提交