
- Python SQLite 教程
- Python SQLite - 首頁
- Python SQLite - 簡介
- Python SQLite - 建立連線
- Python SQLite - 建立表
- Python SQLite - 插入資料
- Python SQLite - 查詢資料
- Python SQLite - WHERE 子句
- Python SQLite - ORDER BY 子句
- Python SQLite - 更新表
- Python SQLite - 刪除資料
- Python SQLite - 刪除表
- Python SQLite - LIMIT 子句
- Python SQLite - JOIN 操作
- Python SQLite - 遊標物件
- Python SQLite 有用資源
- Python SQLite 快速指南
- Python SQLite - 有用資源
- Python SQLite - 討論
Python SQLite 快速指南
Python SQLite - 簡介
SQLite3 可以使用 sqlite3 模組與 Python 整合,該模組由 Gerhard Haring 編寫。它提供了一個符合 PEP 249 中描述的 DB-API 2.0 規範的 SQL 介面。您無需單獨安裝此模組,因為它預設隨 Python 2.5.x 及更高版本一起提供。
要使用 sqlite3 模組,您必須首先建立一個代表資料庫的連線物件,然後您可以選擇建立一個遊標物件,這將幫助您執行所有 SQL 語句。
Python SQLite3 模組 API
以下是重要的 sqlite3 模組例程,足以滿足您從 Python 程式中使用 SQLite 資料庫的要求。如果您正在尋找更復雜的應用程式,則可以檢視 Python sqlite3 模組的官方文件。
序號 | API & 描述 |
---|---|
1 |
sqlite3.connect(database [,timeout ,其他可選引數]) 此 API 開啟與 SQLite 資料庫檔案的連線。您可以使用“:memory:”開啟與駐留在 RAM 中而不是磁碟上的資料庫的資料庫連線。如果資料庫成功開啟,它將返回一個連線物件。 |
2 |
connection.cursor([cursorClass]) 此例程建立一個遊標,它將在您使用 Python 進行資料庫程式設計的過程中使用。此方法接受單個可選引數 cursorClass。如果提供,則必須是擴充套件 sqlite3.Cursor 的自定義遊標類。 |
3 |
cursor.execute(sql [, 可選引數]) 此例程執行 SQL 語句。SQL 語句可以是引數化的(即使用佔位符而不是 SQL 字面量)。sqlite3 模組支援兩種型別的佔位符:問號和命名佔位符(命名樣式)。 例如 − cursor.execute("insert into people values (?, ?)", (who, age)) |
4 |
connection.execute(sql [, 可選引數]) 此例程是遊標物件提供的上述 execute 方法的快捷方式,它透過呼叫 cursor 方法建立一箇中間遊標物件,然後使用給定的引數呼叫遊標的 execute 方法。 |
5 |
cursor.executemany(sql, seq_of_parameters) 此例程針對序列 sql 中找到的所有引數序列或對映執行 SQL 命令。 |
6 |
connection.executemany(sql[, parameters]) 此例程是一個快捷方式,它透過呼叫 cursor 方法建立一箇中間遊標物件,然後使用給定的引數呼叫 cursor.s executemany 方法。 |
7 | cursor.executescript(sql_script) 此例程以指令碼形式一次執行多個 SQL 語句。它首先發出 COMMIT 語句,然後執行它作為引數獲得的 SQL 指令碼。所有 SQL 語句都應以分號 (;) 分隔。 |
8 |
connection.executescript(sql_script) 此例程是一個快捷方式,它透過呼叫 cursor 方法建立一箇中間遊標物件,然後使用給定的引數呼叫遊標的 executescript 方法。 |
9 |
connection.total_changes() 此例程返回自資料庫連線開啟以來已修改、插入或刪除的資料庫行的總數。 |
10 |
connection.commit() 此方法提交當前事務。如果您不呼叫此方法,則自上次呼叫 commit() 以來所做的任何操作都無法從其他資料庫連線中看到。 |
11 |
connection.rollback() 此方法回滾自上次呼叫 commit() 以來對資料庫的任何更改。 |
12 |
connection.close() 此方法關閉資料庫連線。請注意,這不會自動呼叫 commit()。如果您在首先呼叫 commit() 之前關閉資料庫連線,您的更改將會丟失! |
13 |
cursor.fetchone() 此方法獲取查詢結果集的下一行,返回單個序列,或者當沒有更多資料可用時返回 None。 |
14 |
cursor.fetchmany([size = cursor.arraysize]) 此例程獲取查詢結果的下一組行,返回一個列表。當沒有更多行可用時,將返回一個空列表。該方法嘗試獲取 size 引數指示的儘可能多的行。 |
15 |
cursor.fetchall() 此例程獲取查詢結果的所有(剩餘)行,返回一個列表。當沒有行可用時,將返回一個空列表。 |
Python SQLite - 建立連線
要與 SQLite 建立連線,請開啟命令提示符,瀏覽到您安裝 SQLite 的位置,然後執行命令sqlite3,如下所示:

使用 Python 建立連線
您可以使用 SQLite3 Python 模組與 SQLite2 資料庫進行通訊。為此,首先需要建立連線(建立連線物件)。
要使用 Python 與 SQLite3 資料庫建立連線,您需要:
使用 import 語句匯入 sqlite3 模組。
connect() 方法接受您需要連線到的資料庫的名稱作為引數,並返回一個 Connection 物件。
示例
import sqlite3 conn = sqlite3.connect('example.db')
輸出
print("Connection established ..........")
Python SQLite - 建立表
使用 SQLite CREATE TABLE 語句,您可以在資料庫中建立表。
語法
以下是建立 SQLite 資料庫中表的語法:
CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns), column2 datatype, column3 datatype, ..... columnN datatype );
示例
以下 SQLite 查詢/語句在 SQLite 資料庫中建立名為CRICKETERS的表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
讓我們再建立一個名為 OdiStats 的表,用於描述 CRICKETERS 表中每個球員的一日板球統計資料。
sqlite> CREATE TABLE ODIStats ( First_Name VARCHAR(255), Matches INT, Runs INT, AVG FLOAT, Centuries INT, HalfCenturies INT ); sqlite>
您可以使用.tables命令在 SQLite 資料庫中獲取資料庫中表的列表。建立表後,如果您可以驗證表列表,您可以在其中觀察新建立的表,如下所示:
sqlite> . tables CRICKETERS ODIStats sqlite>
使用 Python 建立表
遊標物件包含執行查詢和提取資料等的所有方法。connection 類的 cursor 方法返回一個遊標物件。
因此,要使用 Python 在 SQLite 資料庫中建立表:
使用 connect() 方法與資料庫建立連線。
透過在上面建立的連線物件上呼叫 cursor() 方法來建立一個遊標物件。
現在使用 Cursor 類的 execute() 方法執行 CREATE TABLE 語句。
示例
以下 Python 程式在 SQLite3 中建立一個名為 Employee 的表:
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Doping EMPLOYEE table if already exists. cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") #Creating table as per requirement sql ='''CREATE TABLE EMPLOYEE( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )''' cursor.execute(sql) print("Table created successfully........") #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
Table created successfully........
Python SQLite - 插入資料
您可以使用 INSERT INTO 語句向 SQLite 的現有表中新增新行。在這裡,您需要指定表的名稱、列名和值(與列名的順序相同)。
語法
以下是 INSERT 語句的推薦語法:
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);
其中,column1、column2、column3……是表的列名,value1、value2、value3……是您需要插入到表中的值。
示例
假設我們已經使用 CREATE TABLE 語句建立了一個名為 CRICKETERS 的表,如下所示:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
以下 PostgreSQL 語句在上面建立的表中插入一行。
sqlite> insert into CRICKETERS (First_Name, Last_Name, Age, Place_Of_Birth, Country) values('Shikhar', 'Dhawan', 33, 'Delhi', 'India'); sqlite>
使用INSERT INTO語句插入記錄時,如果您跳過任何列名,則此記錄將被插入,在您跳過的列中留下空位。
sqlite> insert into CRICKETERS (First_Name, Last_Name, Country) values ('Jonathan', 'Trott', 'SouthAfrica'); sqlite>
如果您傳遞的值的順序與其在表中的相應列名相同,您也可以在不指定列名的情況下將記錄插入表中。
sqlite> insert into CRICKETERS values('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka'); sqlite> insert into CRICKETERS values('Virat', 'Kohli', 30, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Rohit', 'Sharma', 32, 'Nagpur', 'India'); sqlite>
將記錄插入表後,您可以使用 SELECT 語句驗證其內容,如下所示:
sqlite> select * from cricketers; Shikhar |Dhawan | 33 | Delhi | India Jonathan |Trott | | | SouthAfrica Kumara |Sangakkara | 41 | Matale| Srilanka Virat |Kohli | 30 | Delhi | India Rohit |Sharma | 32 | Nagpur| India sqlite>
使用 Python 插入資料
要向 SQLite 資料庫中的現有表新增記錄:
匯入 sqlite3 包。
使用 connect() 方法建立一個連線物件,並將資料庫的名稱作為引數傳遞給它。
cursor()方法返回一個遊標物件,您可以使用它與 SQLite3 通訊。透過在(上面建立的)Connection 物件上呼叫 cursor() 物件來建立一個遊標物件。
然後,透過將 INSERT 語句作為引數傳遞給它,在遊標物件上呼叫 execute() 方法。
示例
以下 Python 示例將記錄插入到名為 EMPLOYEE 的表中:
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Preparing SQL queries to INSERT a record into the database. cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Ramya', 'Rama Priya', 27, 'F', 9000)''' ) cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Vinay', 'Battacharya', 20, 'M', 6000)''') cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Sharukh', 'Sheik', 25, 'M', 8300)''') cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Sarmista', 'Sharma', 26, 'F', 10000)''') cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Tripthi', 'Mishra', 24, 'F', 6000)''') # Commit your changes in the database conn.commit() print("Records inserted........") # Closing the connection conn.close()
輸出
Records inserted........
Python SQLite - 查詢資料
您可以使用 SELECT 查詢從 SQLite 表中檢索資料。此查詢/語句以表格形式返回指定關係(表)的內容,稱為結果集。
語法
以下是 SQLite 中 SELECT 語句的語法:
SELECT column1, column2, columnN FROM table_name;
示例
假設我們已經使用以下查詢建立了一個名為 CRICKETERS 的表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
如果我們使用 INSERT 語句向其中插入了 5 條記錄,如下所示:
sqlite> insert into CRICKETERS values('Shikhar', 'Dhawan', 33, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Jonathan', 'Trott', 38, 'CapeTown', 'SouthAfrica'); sqlite> insert into CRICKETERS values('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka'); sqlite> insert into CRICKETERS values('Virat', 'Kohli', 30, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Rohit', 'Sharma', 32, 'Nagpur', 'India'); sqlite>
以下 SELECT 查詢從 CRICKETERS 表中檢索列 FIRST_NAME、LAST_NAME 和 COUNTRY 的值。
sqlite> SELECT FIRST_NAME, LAST_NAME, COUNTRY FROM CRICKETERS; Shikhar |Dhawan |India Jonathan |Trott |SouthAfrica Kumara |Sangakkara |Srilanka Virat |Kohli |India Rohit |Sharma |India sqlite>
正如您所看到的,SQLite 資料庫的 SELECT 語句只返回指定表的記錄。要獲得格式化的輸出,您需要在 SELECT 語句之前使用各自的命令設定header和mode,如下所示:
sqlite> .header on sqlite> .mode column sqlite> SELECT FIRST_NAME, LAST_NAME, COUNTRY FROM CRICKETERS; First_Name Last_Name Country ---------- ---------- ---------- Shikhar Dhawan India Jonathan Trott SouthAfric Kumara Sangakkara rilanka Virat Kohli India Rohit Sharma India
如果您想檢索每個記錄的所有列,則需要將列名替換為“*”,如下所示:
sqlite> .header on sqlite> .mode column sqlite> SELECT * FROM CRICKETERS; First_Name Last_Name Age Place_Of_Birth Country ---------- ---------- ------- -------------- ---------- Shikhar Dhawan 33 Delhi India Jonathan Trott 38 CapeTown SouthAfric Kumara Sangakkara 41 Matale Srilanka Virat Kohli 30 Delhi India Rohit Sharma 32 Nagpur India sqlite>
在SQLite中,列的預設寬度為 10 個值,超過此寬度的值將被截斷(觀察上面表格中第 2 行的國家/地區列)。您可以使用.width命令在檢索表內容之前將每列的寬度設定為所需的值,如下所示:
sqlite> .width 10, 10, 4, 10, 13 sqlite> SELECT * FROM CRICKETERS; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- -------- Shikhar Dhawan 33 Delhi India Jonathan Trott 38 CapeTown SouthAfrica Kumara Sangakkara 41 Matale Srilanka Virat Kohli 30 Delhi India Rohit Sharma 32 Nagpur India sqlite>
使用 Python 檢索資料
對任何資料庫的讀取操作都意味著從資料庫中提取一些有用的資訊。您可以使用 sqlite python 模組提供的 fetch() 方法從 MYSQL 中提取資料。
sqlite3.Cursor 類提供了三種方法,即 fetchall()、fetchmany() 和 fetchone(),其中:
fetchall() 方法檢索查詢結果集中的所有行,並將它們作為元組列表返回。(如果我們在檢索幾行後執行此操作,它將返回剩餘的行)。
fetchone() 方法獲取查詢結果中的下一行,並將其作為元組返回。
fetchmany() 方法類似於 fetchone(),但是它檢索查詢結果集中的下一組行,而不是單行。
注意 - 結果集是在使用遊標物件查詢表時返回的物件。
示例
以下示例使用 SELECT 查詢獲取 EMPLOYEE 表的所有行,並從獲得的結果集中首先使用 fetchone() 方法檢索第一行,然後使用 fetchall() 方法檢索剩餘的行。
以下 Python 程式演示瞭如何從上面示例中建立的 COMPANY 表中獲取和顯示記錄。
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Retrieving data cursor.execute('''SELECT * from EMPLOYEE''') #Fetching 1st row from the table result = cursor.fetchone(); print(result) #Fetching 1st row from the table result = cursor.fetchall(); print(result) #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
('Ramya', 'Rama priya', 27, 'F', 9000.0) [ ('Vinay', 'Battacharya', 20, 'M', 6000.0), ('Sharukh', 'Sheik', 25, 'M', 8300.0), ('Sarmista', 'Sharma', 26, 'F', 10000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0) ]
Python SQLite - WHERE 子句
如果要在 SQLite 中獲取、刪除或更新表的特定行,需要使用 where 子句指定條件來過濾表中的行以便進行操作。
例如,如果有一個帶有 where 子句的 SELECT 語句,則只有滿足指定條件的行才會被檢索。
語法
以下是 SQLite 中 WHERE 子句的語法:
SELECT column1, column2, columnN FROM table_name WHERE [search_condition]
可以使用比較運算子或邏輯運算子來指定 search_condition,例如 >、<、=、LIKE、NOT 等。下面的示例將使這個概念更清晰。
示例
假設我們已經使用以下查詢建立了一個名為 CRICKETERS 的表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
如果我們使用 INSERT 語句向其中插入了 5 條記錄,如下所示:
sqlite> insert into CRICKETERS values('Shikhar', 'Dhawan', 33, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Jonathan', 'Trott', 38, 'CapeTown', 'SouthAfrica'); sqlite> insert into CRICKETERS values('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka'); sqlite> insert into CRICKETERS values('Virat', 'Kohli', 30, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Rohit', 'Sharma', 32, 'Nagpur', 'India'); sqlite>
下面的 SELECT 語句檢索年齡大於 35 的記錄:
sqlite> SELECT * FROM CRICKETERS WHERE AGE > 35; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- ----------- Jonathan Trott 38 CapeTown SouthAfrica Kumara Sangakkara 41 Matale Srilanka sqlite>
使用 Python 的 Where 子句
遊標物件/類包含執行查詢和獲取資料等的所有方法。連線類的遊標方法返回一個遊標物件。
因此,要使用 Python 在 SQLite 資料庫中建立表:
使用 connect() 方法與資料庫建立連線。
透過在上面建立的連線物件上呼叫 cursor() 方法來建立一個遊標物件。
現在使用 Cursor 類的 execute() 方法執行 CREATE TABLE 語句。
示例
下面的示例建立一個名為 Employee 的表並填充它。然後使用 where 子句檢索年齡值小於 23 的記錄。
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Doping EMPLOYEE table if already exists. cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") sql = '''CREATE TABLE EMPLOYEE( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )''' cursor.execute(sql) #Populating the table cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Ramya', 'Rama priya', 27, 'F', 9000)''') cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Vinay', 'Battacharya', 20, 'M', 6000)''') cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Sharukh', 'Sheik', 25, 'M', 8300)''') cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Sarmista', 'Sharma', 26, 'F', 10000)''') cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Tripthi', 'Mishra', 24, 'F', 6000)''') #Retrieving specific records using the where clause cursor.execute("SELECT * from EMPLOYEE WHERE AGE <23") print(cursor.fetchall()) #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
[('Vinay', 'Battacharya', 20, 'M', 6000.0)]
Python SQLite - ORDER BY 子句
使用 SELECT 查詢獲取資料時,將按照插入資料的順序獲得記錄。
可以使用 **_Order By_** 子句按所需順序(升序或降序)對結果進行排序。預設情況下,此子句按升序對結果進行排序,如果需要按降序排列,則需要顯式使用“DESC”。
語法
以下是 SQLite 中 ORDER BY 子句的語法:
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC];
示例
假設我們已經使用以下查詢建立了一個名為 CRICKETERS 的表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
如果我們使用 INSERT 語句向其中插入了 5 條記錄,如下所示:
sqlite> insert into CRICKETERS values('Shikhar', 'Dhawan', 33, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Jonathan', 'Trott', 38, 'CapeTown', 'SouthAfrica'); sqlite> insert into CRICKETERS values('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka'); sqlite> insert into CRICKETERS values('Virat', 'Kohli', 30, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Rohit', 'Sharma', 32, 'Nagpur', 'India'); sqlite>
下面的 SELECT 語句按 CRICKETERS 表中記錄的年齡升序檢索行:
sqlite> SELECT * FROM CRICKETERS ORDER BY AGE; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- ----------- Virat Kohli 30 Delhi India Rohit Sharma 32 Nagpur India Shikhar Dhawan 33 Delhi India Jonathan Trott 38 CapeTown SouthAfrica Kumara Sangakkara 41 Matale Srilanka sqlite>
可以使用多個列對錶的記錄進行排序。下面的 SELECT 語句根據 _AGE_ 和 _FIRST_NAME_ 列對 CRICKETERS 表的記錄進行排序。
sqlite> SELECT * FROM CRICKETERS ORDER BY AGE, FIRST_NAME; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- ------------- Virat Kohli 30 Delhi India Rohit Sharma 32 Nagpur India Shikhar Dhawan 33 Delhi India Jonathan Trott 38 CapeTown SouthAfrica Kumara Sangakkara 41 Matale Srilanka sqlite>
預設情況下,**ORDER BY** 子句按升序對錶中的記錄進行排序,可以使用 DESC 將結果排列為降序,如下所示:
sqlite> SELECT * FROM CRICKETERS ORDER BY AGE DESC; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- ------------- Kumara Sangakkara 41 Matale Srilanka Jonathan Trott 38 CapeTown SouthAfrica Shikhar Dhawan 33 Delhi India Rohit Sharma 32 Nagpur India Virat Kohli 30 Delhi India sqlite>
使用 Python 的 ORDER BY 子句
要按特定順序檢索表的內容,請在遊標物件上呼叫 execute() 方法,並將 SELECT 語句以及 ORDER BY 子句作為引數傳遞給它。
示例
在下面的示例中,我們建立一個名為 Employee 的表,向其中插入記錄,然後使用 ORDER BY 子句按年齡的(升序)順序檢索其記錄。
import psycopg2 #establishing the connection conn = psycopg2.connect( database="mydb", user='postgres', password='password', host='127.0.0.1', port= '5432' ) #Setting auto commit false conn.autocommit = True #Creating a cursor object using the cursor() method cursor = conn.cursor() #Doping EMPLOYEE table if already exists. cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") #Creating a table sql = '''CREATE TABLE EMPLOYEE( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME INT, CONTACT INT )''' cursor.execute(sql) #Populating the table #Populating the table cursor.execute( '''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Ramya', 'Rama priya', 27, 'F', 9000), ('Vinay', 'Battacharya', 20, 'M', 6000), ('Sharukh', 'Sheik', 25, 'M', 8300), ('Sarmista', 'Sharma', 26, 'F', 10000), ('Tripthi', 'Mishra', 24, 'F', 6000)''') conn.commit() #Retrieving specific records using the ORDER BY clause cursor.execute("SELECT * from EMPLOYEE ORDER BY AGE") print(cursor.fetchall()) #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
[ ('Vinay', 'Battacharya', 20, 'M', 6000, None), ('Tripthi', 'Mishra', 24, 'F', 6000, None), ('Sharukh', 'Sheik', 25, 'M', 8300, None), ('Sarmista', 'Sharma', 26, 'F', 10000, None), ('Ramya', 'Rama priya', 27, 'F', 9000, None) ]
Python SQLite - 更新表
資料庫上的 UPDATE 操作意味著修改表中已存在的一個或多個記錄的值。可以使用 UPDATE 語句更新 SQLite 中現有記錄的值。
要更新特定行,需要結合使用 WHERE 子句。
語法
以下是 SQLite 中 UPDATE 語句的語法:
UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];
示例
假設我們已經使用以下查詢建立了一個名為 CRICKETERS 的表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
如果我們使用 INSERT 語句向其中插入了 5 條記錄,如下所示:
sqlite> insert into CRICKETERS values('Shikhar', 'Dhawan', 33, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Jonathan', 'Trott', 38, 'CapeTown', 'SouthAfrica'); sqlite> insert into CRICKETERS values('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka'); sqlite> insert into CRICKETERS values('Virat', 'Kohli', 30, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Rohit', 'Sharma', 32, 'Nagpur', 'India'); sqlite>
下面的語句修改名為 **Shikhar** 的板球運動員的年齡:
sqlite> UPDATE CRICKETERS SET AGE = 45 WHERE FIRST_NAME = 'Shikhar' ; sqlite>
如果檢索 FIRST_NAME 為 Shikhar 的記錄,你會發現年齡值已更改為 45:
sqlite> SELECT * FROM CRICKETERS WHERE FIRST_NAME = 'Shikhar'; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- -------- Shikhar Dhawan 45 Delhi India sqlite>
如果沒有使用 WHERE 子句,所有記錄的值都將被更新。下面的 UPDATE 語句將 CRICKETERS 表中所有記錄的年齡增加 1:
sqlite> UPDATE CRICKETERS SET AGE = AGE+1; sqlite>
如果使用 SELECT 命令檢索表的內容,則可以看到更新後的值,如下所示:
sqlite> SELECT * FROM CRICKETERS; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- ------------- Shikhar Dhawan 46 Delhi India Jonathan Trott 39 CapeTown SouthAfrica Kumara Sangakkara 42 Matale Srilanka Virat Kohli 31 Delhi India Rohit Sharma 33 Nagpur India sqlite>
使用 Python 更新現有記錄
要向 SQLite 資料庫中的現有表新增記錄:
匯入 sqlite3 包。
使用 connect() 方法建立一個連線物件,並將資料庫的名稱作為引數傳遞給它。
cursor()方法返回一個遊標物件,您可以使用它與 SQLite3 通訊。透過在(上面建立的)Connection 物件上呼叫 cursor() 物件來建立一個遊標物件。
然後,透過將 UPDATE 語句作為引數傳遞給它,在遊標物件上呼叫 execute() 方法。
示例
下面的 Python 示例建立一個名為 EMPLOYEE 的表,向其中插入 5 條記錄,並將所有男性員工的年齡增加 1:
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Doping EMPLOYEE table if already exists. cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") #Creating table as per requirement sql ='''CREATE TABLE EMPLOYEE( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )''' cursor.execute(sql) #Inserting data cursor.execute('''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Ramya', 'Rama priya', 27, 'F', 9000), ('Vinay', 'Battacharya', 20, 'M', 6000), ('Sharukh', 'Sheik', 25, 'M', 8300), ('Sarmista', 'Sharma', 26, 'F', 10000), ('Tripthi', 'Mishra', 24, 'F', 6000)''') conn.commit() #Fetching all the rows before the update print("Contents of the Employee table: ") cursor.execute('''SELECT * from EMPLOYEE''') print(cursor.fetchall()) #Updating the records sql = '''UPDATE EMPLOYEE SET AGE=AGE+1 WHERE SEX = 'M' ''' cursor.execute(sql) print("Table updated...... ") #Fetching all the rows after the update print("Contents of the Employee table after the update operation: ") cursor.execute('''SELECT * from EMPLOYEE''') print(cursor.fetchall()) #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
Contents of the Employee table: [ ('Ramya', 'Rama priya', 27, 'F', 9000.0), ('Vinay', 'Battacharya', 20, 'M', 6000.0), ('Sharukh', 'Sheik', 25, 'M', 8300.0), ('Sarmista', 'Sharma', 26, 'F', 10000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0) ] Table updated...... Contents of the Employee table after the update operation: [ ('Ramya', 'Rama priya', 27, 'F', 9000.0), ('Vinay', 'Battacharya', 21, 'M', 6000.0), ('Sharukh', 'Sheik', 26, 'M', 8300.0), ('Sarmista', 'Sharma', 26, 'F', 10000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0) ]
Python SQLite - 刪除資料
要從 SQLite 表中刪除記錄,需要使用 DELETE FROM 語句。要刪除特定記錄,需要結合使用 WHERE 子句。
語法
以下是 SQLite 中 DELETE 查詢的語法:
DELETE FROM table_name [WHERE Clause]
示例
假設我們已經使用以下查詢建立了一個名為 CRICKETERS 的表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
如果我們使用 INSERT 語句向其中插入了 5 條記錄,如下所示:
sqlite> insert into CRICKETERS values('Shikhar', 'Dhawan', 33, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Jonathan', 'Trott', 38, 'CapeTown', 'SouthAfrica'); sqlite> insert into CRICKETERS values('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka'); sqlite> insert into CRICKETERS values('Virat', 'Kohli', 30, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Rohit', 'Sharma', 32, 'Nagpur', 'India'); sqlite>
下面的語句刪除姓氏為“Sangakkara”的板球運動員的記錄。
sqlite> DELETE FROM CRICKETERS WHERE LAST_NAME = 'Sangakkara'; sqlite>
如果使用 SELECT 語句檢索表的內容,則可以看到只有 4 條記錄,因為我們刪除了一條。
sqlite> SELECT * FROM CRICKETERS; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- -------- Shikhar Dhawan 46 Delhi India Jonathan Trott 39 CapeTown SouthAfrica Virat Kohli 31 Delhi India Rohit Sharma 33 Nagpur India sqlite>
如果在沒有 WHERE 子句的情況下執行 DELETE FROM 語句,則將刪除指定表中的所有記錄。
sqlite> DELETE FROM CRICKETERS; sqlite>
由於已刪除所有記錄,如果嘗試使用 SELECT 語句檢索 CRICKETERS 表的內容,則將獲得一個空的結果集,如下所示:
sqlite> SELECT * FROM CRICKETERS; sqlite>
使用 Python 刪除資料
要向 SQLite 資料庫中的現有表新增記錄:
匯入 sqlite3 包。
使用 _connect()_ 方法建立一個連線物件,並將資料庫的名稱作為引數傳遞給它。
_**cursor()**_ 方法返回一個遊標物件,可以使用它與 SQLite3 通訊。透過在(上面建立的)連線物件上呼叫 cursor() 物件來建立一個遊標物件。
然後,透過將 **DELETE** 語句作為引數傳遞給它,在遊標物件上呼叫 execute() 方法。
示例
下面的 python 示例刪除 EMPLOYEE 表中年齡值大於 25 的記錄。
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Retrieving contents of the table print("Contents of the table: ") cursor.execute('''SELECT * from EMPLOYEE''') print(cursor.fetchall()) #Deleting records cursor.execute('''DELETE FROM EMPLOYEE WHERE AGE > 25''') #Retrieving data after delete print("Contents of the table after delete operation ") cursor.execute("SELECT * from EMPLOYEE") print(cursor.fetchall()) #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
Contents of the table: [ ('Ramya', 'Rama priya', 27, 'F', 9000.0), ('Vinay', 'Battacharya', 21, 'M', 6000.0), ('Sharukh', 'Sheik', 26, 'M', 8300.0), ('Sarmista', 'Sharma', 26, 'F', 10000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0) ] Contents of the table after delete operation [ ('Vinay', 'Battacharya', 21, 'M', 6000.0), ('Tripthi', 'Mishra', 24, 'F', 6000.0) ]
Python SQLite - 刪除表
可以使用 DROP TABLE 語句刪除整個表。只需要指定要刪除的表的名稱。
語法
以下是 PostgreSQL 中 DROP TABLE 語句的語法:
DROP TABLE table_name;
示例
假設我們已經使用以下查詢建立了名為 CRICKETERS 和 EMPLOYEES 的兩個表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite> CREATE TABLE EMPLOYEE( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT ); sqlite>
現在,如果使用 **.tables** 命令驗證表列表,則可以在其中(列表)看到上面建立的表,如下所示:
sqlite> .tables CRICKETERS EMPLOYEE sqlite>
下面的語句從資料庫中刪除名為 Employee 的表:
sqlite> DROP table employee; sqlite>
由於已刪除 Employee 表,如果再次檢索表列表,則只會看到一個表。
sqlite> .tables CRICKETERS sqlite>
如果再次嘗試刪除 Employee 表,由於已刪除它,則會收到一條錯誤訊息,提示“no such table”,如下所示:
sqlite> DROP table employee; Error: no such table: employee sqlite>
要解決此問題,可以使用 IF EXISTS 子句以及 DELETE 語句。如果表存在,則此語句會刪除表;否則,會跳過 DELETE 操作。
sqlite> DROP table IF EXISTS employee; sqlite>
使用 Python 刪除表
可以使用 MYSQL 的 DROP 語句隨時刪除表,但在刪除任何現有表時需要非常小心,因為刪除表後資料將無法恢復。
示例
要使用 python 從 SQLite3 資料庫中刪除表,請在遊標物件上呼叫 _**execute()**_ 方法,並將 drop 語句作為引數傳遞給它。
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Doping EMPLOYEE table if already exists cursor.execute("DROP TABLE emp") print("Table dropped... ") #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
Table dropped...
Python SQLite - LIMIT 子句
如果在獲取記錄時想要將它們限制為特定數量,可以使用 SQLite 的 LIMIT 子句。
語法
以下是 SQLite 中 LIMIT 子句的語法:
SELECT column1, column2, columnN FROM table_name LIMIT [no of rows]
示例
假設我們已經使用以下查詢建立了一個名為 CRICKETERS 的表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
如果我們使用 INSERT 語句向其中插入了 5 條記錄,如下所示:
sqlite> insert into CRICKETERS values('Shikhar', 'Dhawan', 33, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Jonathan', 'Trott', 38, 'CapeTown', 'SouthAfrica'); sqlite> insert into CRICKETERS values('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka'); sqlite> insert into CRICKETERS values('Virat', 'Kohli', 30, 'Delhi', 'India'); sqlite> insert into CRICKETERS values('Rohit', 'Sharma', 32, 'Nagpur', 'India'); sqlite>
下面的語句使用 LIMIT 子句檢索 Cricketers 表的前 3 條記錄:
sqlite> SELECT * FROM CRICKETERS LIMIT 3; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- ------------- Shikhar Dhawan 33 Delhi India Jonathan Trott 38 CapeTown SouthAfrica Kumara Sangakkara 41 Matale Srilanka sqlite>
如果需要從第 n 條記錄(不是第 1 條)開始限制記錄,則可以使用 OFFSET 和 LIMIT。
sqlite> SELECT * FROM CRICKETERS LIMIT 3 OFFSET 2; First_Name Last_Name Age Place_Of_B Country ---------- ---------- ---- ---------- -------- Kumara Sangakkara 41 Matale Srilanka Virat Kohli 30 Delhi India Rohit Sharma 32 Nagpur India sqlite>
使用 Python 的 LIMIT 子句
如果透過傳遞帶有 LIMIT 子句的 SELECT 查詢來在遊標物件上呼叫 execute() 方法,則可以檢索所需數量的記錄。
示例
下面的 python 示例使用 LIMIT 子句檢索 EMPLOYEE 表的前兩條記錄。
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Retrieving single row sql = '''SELECT * from EMPLOYEE LIMIT 3''' #Executing the query cursor.execute(sql) #Fetching the data result = cursor.fetchall(); print(result) #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
[ ('Ramya', 'Rama priya', 27, 'F', 9000.0), ('Vinay', 'Battacharya', 20, 'M', 6000.0), ('Sharukh', 'Sheik', 25, 'M', 8300.0) ]
Python SQLite - JOIN 操作
當資料分成兩個表時,可以使用聯接從這兩個表中獲取組合記錄。
示例
假設我們已經使用以下查詢建立了一個名為 CRICKETERS 的表:
sqlite> CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); sqlite>
讓我們再建立一個名為 OdiStats 的表,用於描述 CRICKETERS 表中每個球員的一日板球統計資料。
sqlite> CREATE TABLE ODIStats ( First_Name VARCHAR(255), Matches INT, Runs INT, AVG FLOAT, Centuries INT, HalfCenturies INT ); sqlite>
下面的語句檢索這兩個表的組合值資料:
sqlite> SELECT Cricketers.First_Name, Cricketers.Last_Name, Cricketers.Country, OdiStats.matches, OdiStats.runs, OdiStats.centuries, OdiStats.halfcenturies from Cricketers INNER JOIN OdiStats ON Cricketers.First_Name = OdiStats.First_Name; First_Name Last_Name Country Matches Runs Centuries HalfCenturies ---------- ---------- ------- ------- ---- --------- -------------- Shikhar Dhawan Indi 133 5518 17 27 Jonathan Trott Sout 68 2819 4 22 Kumara Sangakkara Sril 404 14234 25 93 Virat Kohli Indi 239 11520 43 54 Rohit Sharma Indi 218 8686 24 42 sqlite>
使用 Python 的 JOIN 子句
下面的 SQLite 示例演示了使用 python 的 JOIN 子句:
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor() #Retrieving data sql = '''SELECT * from EMP INNER JOIN CONTACT ON EMP.CONTACT = CONTACT.ID''' #Executing the query cursor.execute(sql) #Fetching 1st row from the table result = cursor.fetchall(); print(result) #Commit your changes in the database conn.commit() #Closing the connection conn.close()
輸出
[ ('Ramya', 'Rama priya', 27, 'F', 9000.0, 101, 101, 'Krishna@mymail.com', 'Hyderabad'), ('Vinay', 'Battacharya', 20, 'M', 6000.0, 102, 102,'Raja@mymail.com', 'Vishakhapatnam'), ('Sharukh', 'Sheik', 25, 'M', 8300.0, 103, 103, 'Krishna@mymail.com', 'Pune'), ('Sarmista', 'Sharma', 26, 'F', 10000.0, 104, 104, 'Raja@mymail.com', 'Mumbai') ]
Python SQLite - 遊標物件
sqlite3.Cursor 類是一個例項,可以使用它來呼叫執行 SQLite 語句、從查詢的結果集中獲取資料的方法。可以使用連線物件/類的 cursor() 方法建立遊標物件。
示例
import sqlite3 #Connecting to sqlite conn = sqlite3.connect('example.db') #Creating a cursor object using the cursor() method cursor = conn.cursor()
方法
以下是遊標類/物件提供的各種方法。
方法 | 描述 |
---|---|
execute() |
此例程執行 SQL 語句。SQL 語句可以是引數化的(即,使用佔位符而不是 SQL 字面量)。psycopg2 模組支援使用 %s 符號進行佔位符。 例如:cursor.execute("insert into people values (%s, %s)", (who, age)) |
executemany() |
此例程針對序列 sql 中找到的所有引數序列或對映執行 SQL 命令。 |
fetchone() |
此方法獲取查詢結果集的下一行,返回單個序列,或者當沒有更多資料可用時返回 None。 |
fetchmany() |
此例程獲取查詢結果的下一組行,返回一個列表。當沒有更多行可用時,將返回一個空列表。該方法嘗試獲取 size 引數指示的儘可能多的行。 |
fetchall() |
此例程獲取查詢結果的所有(剩餘)行,返回一個列表。當沒有行可用時,將返回一個空列表。 |
屬性
以下是遊標類的屬性:
方法 | 描述 |
---|---|
arraySize |
這是一個讀/寫屬性,可以設定 fetchmany() 方法返回的行數。 |
description |
這是一個只讀屬性,它返回一個列表,其中包含結果集中列的描述。 |
lastrowid |
這是一個只讀屬性,如果表中存在任何自動遞增列,則返回上次 INSERT 或 UPDATE 操作為該列生成的值。 |
rowcount |
對於 SELECT 和 UPDATE 操作,這將返回返回/更新的行數。 |
connection |
此只讀屬性提供遊標物件使用的 SQLite 資料庫連線。 |