 
- Python SQLite Tutorial
- Python SQLite - Home
- Python SQLite - Introduction
- Python SQLite - Establishing Connection
- Python SQLite - Create Table
- Python SQLite - Insert Data
- Python SQLite - Select Data
- Python SQLite - Where Clause
- Python SQLite - Order By
- Python SQLite - Update Table
- Python SQLite - Delete Data
- Python SQLite - Drop Table
- Python SQLite - Limit
- Python SQLite - Join
- Python SQLite - Cursor Object
- Python SQLite Useful Resources
- Python SQLite - Quick Guide
- Python SQLite - Useful Resources
- Python SQLite - Discussion
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模块的官方文档。
| 先生。 | 接口及说明 | 
|---|---|
| 1 | sqlite3.connect(数据库[,超时,其他可选参数]) 此 API 打开与 SQLite 数据库文件的连接。您可以使用“:memory:”打开与驻留在 RAM 而不是磁盘上的数据库的数据库连接。如果数据库打开成功,则返回一个连接对象。 | 
| 2 | 连接.cursor([cursorClass]) 此例程创建一个游标,该游标将在您使用 Python 进行数据库编程的整个过程中使用。此方法接受单个可选参数cursorClass。如果提供,这必须是扩展 sqlite3.Cursor 的自定义游标类。 | 
| 3 | 光标.execute(sql [,可选参数]) 该例程执行一条 SQL 语句。SQL 语句可以被参数化(即用占位符代替 SQL 文字)。sqlite3模块支持两种占位符:问号和命名占位符(命名样式)。 例如-cursor.execute(“插入人物值 (?, ?)”, (谁, 年龄)) | 
| 4 | 连接.执行(sql [,可选参数]) 该例程是游标对象提供的上述执行方法的快捷方式,它通过调用游标方法创建一个中间游标对象,然后使用给定的参数调用游标的执行方法。 | 
| 5 | 游标.executemany(sql, seq_of_parameters) 此例程针对序列 sql 中找到的所有参数序列或映射执行 SQL 命令。 | 
| 6 | 连接.executemany(sql[, 参数]) 该例程是一个快捷方式,它通过调用cursor方法创建一个中间游标对象,然后使用给定的参数调用cursor.s的executemany方法。 | 
| 7 | 光标.executescript(sql_script) 该例程一次执行以脚本形式提供的多个 SQL 语句。它首先发出 COMMIT 语句,然后执行作为参数获取的 SQL 脚本。所有 SQL 语句都应以分号 (;) 分隔。 | 
| 8 | 连接.executescript(sql_script) 此例程是一个快捷方式,它通过调用光标方法创建中间光标对象,然后使用给定的参数调用光标的executescript 方法。 | 
| 9 | 连接.total_changes() 此例程返回自打开数据库连接以来已修改、插入或删除的数据库行总数。 | 
| 10 | 连接.commit() 该方法提交当前事务。如果不调用此方法,则自上次调用 commit() 以来所做的任何操作对于其他数据库连接都是不可见的。 | 
| 11 | 连接.rollback() 此方法回滚自上次调用 commit() 以来对数据库的任何更改。 | 
| 12 | 连接.close() 该方法关闭数据库连接。请注意,这不会自动调用 commit()。如果您只是关闭数据库连接而不先调用 commit(),您的更改将会丢失! | 
| 13 | 游标.fetchone() 此方法获取查询结果集的下一行,返回单个序列,或者当没有更多数据可用时返回 None。 | 
| 14 | 游标.fetchmany([大小 = 游标.arraysize]) 此例程获取查询结果的下一组行,并返回一个列表。当没有更多行可用时,将返回空列表。该方法尝试获取大小参数指示的尽可能多的行。 | 
| 15 | 游标.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 创建表
Cursor对象包含执行查询、获取数据等的所有方法。连接类的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 语句之前使用相应命令设置标题和模式,如下所示 -
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 个,超出此宽度的值将被截断(观察上表中第二行的国家/地区列)。在检索表的内容之前,您可以使用.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 检索数据
READ 对任何数据库的操作意味着从数据库中获取一些有用的信息。您可以使用 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 子句
Cursor对象/类包含执行查询和获取数据等的所有方法。连接类的cursor方法返回一个游标对象。
因此,要使用 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 - 排序依据
使用 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 子句作为参数传递给它。
例子
在下面的示例中,我们将创建一个包含 name 和 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 条记录,因为我们已经删除了 1 条记录。
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>
由于您已删除所有记录,因此如果您尝试检索 CRICKETERS 表的内容,使用 SELECT 语句您将得到一个空结果集,如下所示 -
sqlite> SELECT * FROM CRICKETERS; sqlite>
使用Python删除数据
将记录添加到 SQLite 数据库中的现有表 -
- 导入sqlite3包。 
- 通过将数据库名称作为参数传递给它,使用connect()方法创建连接对象。 
- Cursor ()方法返回一个游标对象,您可以使用它与 SQLite3 进行通信。通过在(上面创建的)Connection 对象上调用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 表,因为您已经删除了它,您将收到一条错误消息“没有这样的表”,如下所示 -
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 - 限制
在获取记录时,如果您想将记录限制为特定数量,可以使用 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 子句
如果通过传递 SELECT 查询和 LIMIT 子句来调用游标对象上的 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 - 加入
将数据分为两个表后,您可以使用联接从这两个表中获取组合记录。
例子
假设我们使用以下查询创建了一个名为 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 连接子句
以下 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 语句的方法,从查询的结果集中获取数据。您可以使用Connection对象/类的cursor()方法创建Cursor对象。
例子
import sqlite3
#Connecting to sqlite
conn = sqlite3.connect('example.db')
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
方法
以下是 Cursor 类/对象提供的各种方法。
| 方法 | 描述 | 
|---|---|
| 执行() | 该例程执行一条 SQL 语句。SQL 语句可以被参数化(即,用占位符代替 SQL 文字)。psycopg2 模块支持使用 %s 符号的占位符 例如:cursor.execute("插入人物值(%s,%s)",(who,age)) | 
| 执行许多() | 此例程针对序列 sql 中找到的所有参数序列或映射执行 SQL 命令。 | 
| fetchone() | 此方法获取查询结果集的下一行,返回单个序列,或者当没有更多数据可用时返回 None。 | 
| fetchmany() | 此例程获取查询结果的下一组行,并返回一个列表。当没有更多行可用时,将返回空列表。该方法尝试获取大小参数指示的尽可能多的行。 | 
| 获取全部() | 此例程获取查询结果的所有(剩余)行,并返回一个列表。当没有可用行时,将返回空列表。 | 
特性
以下是 Cursor 类的属性 -
| 方法 | 描述 | 
|---|---|
| 数组大小 | 这是一个读/写属性,您可以设置 fetchmany() 方法返回的行数。 | 
| 描述 | 这是一个只读属性,它返回包含结果集中列的描述的列表。 | 
| 拉斯特罗维德 | 这是一个只读属性,如果表中有任何自动递增列,则返回上次 INSERT 或 UPDATE 操作中为该列生成的值。 | 
| 行数 | 这将返回 SELECT 和 UPDATE 操作时返回/更新的行数。 | 
| 联系 | 该只读属性提供 Cursor 对象使用的 SQLite 数据库连接。 |