Python 資料庫程式設計:SQLite

在本教程中,你將學習如何在 Python 中使用 SQLite 資料庫管理系統。你將學習如何使用 SQLite,SQL 查詢,RDBMS 以及更多這些很酷的東西!

Pyton 資料庫

![Python 資料庫。

使用 SQL 語言從資料庫系統檢索資料。](https://pythonspot-9329.kxcdn.com/wp-content/uploads/2016/08/dbms-300x131.png)

資料無處不在,軟體應用程式使用它。資料位於記憶體、檔案或資料庫中。

Python 具有許多資料庫系統的繫結,包括 MySQLPostregsql ,Oracle,Microsoft SQL Server 和 Maria DB。

其中一個資料庫管理系統(DBMS)稱為 SQLite。SQLite 建立於 2000 年,是資料庫中眾多管理系統之一。

SQL 是一種專用程式語言,用於管理資料庫中的資料。該語言自 1986 年以來一直存在,值得學習。

SQLite

![SQLite,一種關聯式資料庫管理系統。](/img/Tutorial/Python Database/SQLite.png)

SQLite 是世界上部署最廣泛的 SQL 資料庫引擎。SQLite 的原始碼位於公共網際網路中。

它是一個獨立的,無伺服器,零配置,事務性 SQL 資料庫引擎。SQLite 專案由 Bloomberg 和 Mozilla 贊助。

安裝 SQLite:

使用此命令安裝 SQLite:

$ sudo apt-get install sqlite

驗證是否正確安裝。複製此程式並將其另存為 test1.py

#!/usr/bin/python 
import sqlite3 as lite
import sys
 
con = None
 
try:
    con = lite.connect('test.db')
    cur = con.cursor()    
    cur.execute('SELECT SQLITE_VERSION()')
    data = cur.fetchone()
    print "SQLite version: %s" % data                
except lite.Error, e:   
    print "Error %s:" % e.args[0]
    sys.exit(1)
finally:    
    if con:
        con.close()

執行:

$ python test1.py

它應該輸出:

SQLite version: 3.8.2

上面的指令碼做了什麼?

該指令碼使用以下行連線到名為 test.db 的新資料庫:

con = lite.connect('test.db')

然後,它使用該命令查詢資料庫管理系統

SELECT SQLITE_VERSION()

然後返回其版本號。該行稱為 SQL 查詢。

SQL 建立和插入

下面的指令碼將資料儲存到名為 user.db 的新資料庫中

#!/usr/bin/python 
import sqlite3 as lite
import sys
 
con = lite.connect('user.db')
 
with con:
 
    cur = con.cursor()    
    cur.execute("CREATE TABLE Users(Id INT, Name TEXT)")
    cur.execute("INSERT INTO Users VALUES(1,'Michelle')")
    cur.execute("INSERT INTO Users VALUES(2,'Sonya')")
    cur.execute("INSERT INTO Users VALUES(3,'Greg')")

SQLite 是一個使用表的資料庫管理系統。這些表可以與其他表有關係:它稱為關聯式資料庫管理系統或 RDBMS。該表定義了資料的結構並可以儲存資料。資料庫可以容納許多不同的表。使用以下命令建立表:

    cur.execute("CREATE TABLE Users(Id INT, Name TEXT)")

我們使用以下命令將記錄新增到表中:

    cur.execute("INSERT INTO Users VALUES(2,'Sonya')")
    cur.execute("INSERT INTO Users VALUES(3,'Greg')")

第一個值是 ID。第二個值是名稱。一旦我們執行指令碼,資料就會被插入資料庫表使用者:

Id Name
1 1 Michelle
2 2 Sonya
3 3 Greg

SQLite 查詢資料

我們可以使用兩種方法來探索資料庫:命令列和圖形介面。

從控制檯: 要使用命令列進行探索,請鍵入以下命令:

sqlite3 user.db
.tables
SELECT * FROM Users;

這將輸出表 Users 中的資料。

sqlite> SELECT * FROM Users;
1|Michelle
2|Sonya
3|Greg

從 GUI: 如果你想使用 GUI,有很多選擇。我個人選擇了 sqllite-man,但還有很多其他選擇。我們安裝使用:

sudo apt-get install sqliteman

我們啟動應用程式 sqliteman。彈出一個 gui。

sqliteman

按 File> Open> user.db. 它似乎沒有太大變化,不用擔心,這只是使用者介面。在左側是一個小樹檢視,按 Tables> users。現在將顯示包括所有記錄的完整表格。

![sqliteman](/img/Tutorial/Python Database/sqliteman.png)

此 GUI 可用於修改表中的記錄(資料)並新增新表。

SQL 資料庫查詢語言

SQL 有許多與資料庫互動的命令。你可以從命令列或 GUI 嘗試以下命令:

sqlite3 user.db 
SELECT * FROM Users;
SELECT count(*) FROM Users;
SELECT name FROM Users;
SELECT * FROM Users WHERE id = 2;
DELETE FROM Users WHERE id = 6;

我們可以在 Python 程式中使用這些查詢:

#!/usr/bin/python 
import sqlite3 as lite
import sys
 
 
con = lite.connect('user.db')
 
with con:    
 
    cur = con.cursor()    
    cur.execute("SELECT * FROM Users")
 
    rows = cur.fetchall()
 
    for row in rows:
        print row

這將從資料庫輸出 Users 表中的所有資料:

$ python get.py 
(1, u'Michelle')
(2, u'Sonya')
(3, u'Greg')

建立使用者資訊資料庫

我們可以跨多個表構建資料。這使我們的資料結構化,快速和有條理。如果我們有一個表來儲存所有東西,我們很快就會出現混亂。我們要做的是建立多個表並將它們組合使用。我們建立了兩個表:

使用者:

Id Name
1 1 Michelle
2 2 Howard
3 3 Greg

工作:

Id Uid 職業
1 1 1 Scientist
2 2 2 Marketer
3 3 3 Developer

要建立這些表,可以在 GUI 中手動完成,也可以使用下面的指令碼:

import sqlite3 as lite
import sys
 
con = lite.connect('system.db')
 
with con:
 
    cur = con.cursor()    
    cur.execute("CREATE TABLE Users(Id INT, Name TEXT)")
    cur.execute("INSERT INTO Users VALUES(1,'Michelle')")
    cur.execute("INSERT INTO Users VALUES(2,'Howard')")
    cur.execute("INSERT INTO Users VALUES(3,'Greg')")
 
    cur.execute("CREATE TABLE Jobs(Id INT, Uid INT, Profession TEXT)")
    cur.execute("INSERT INTO Jobs VALUES(1,1,'Scientist')")
    cur.execute("INSERT INTO Jobs VALUES(2,2,'Marketeer')")
    cur.execute("INSERT INTO Jobs VALUES(3,3,'Developer')")

jobs 表有一個額外的引數 Uid。我們使用它來連線 SQL 查詢中的兩個表:

SELECT users.name, jobs.profession FROM jobs INNER JOIN users ON users.ID = jobs.uid

你可以將該 SQL 查詢合併到 Python 指令碼中:

#!/usr/bin/python 
import sqlite3 as lite
import sys
 
 
con = lite.connect('system.db')
 
with con:    
 
    cur = con.cursor()    
    cur.execute("SELECT users.name, jobs.profession FROM jobs INNER JOIN users ON users.ID = jobs.uid")
 
    rows = cur.fetchall()
 
    for row in rows:
        print row

它應該輸出:

$ python get2.py
(u'Michelle', u'Scientist')
(u'Howard', u'Marketeer')
(u'Greg', u'Developer')