在Python中使用SQLite数据库
数据库是存储数据的最有用和最流行的文件之一;它们可用于存储任何类型的数据,包括文本,数字,图像,二进制数据,文件等。
SQLite是基于SQL语言的关系数据库管理系统。
它是一个C库,它提供了与其他编程语言一起使用的API,包括Python。
它不需要根据MySQL和PostgreSQL等大型数据库引擎的需要运行单独的服务器进程。
它是SWIFT和轻量级,整个数据库存储在单个磁盘文件中,这使其使它类似于CSV或者其他数据存储文件。
许多应用程序使用SQLite进行内部数据存储,主要是在移动设备或者小型应用程序等环境中。
用于Python的SQLite数据库
让我们深入了解SQLite与Python编程语言。
在本教程中,我们将学习使用SQLite,Python SQLite3模块的基础知识的优势,在数据库中创建一个表,将数据插入表中,从表查询数据,以及更新表的数据。
使用SQLite的优点
使用SQLite的主要优点是:
SQLite不需要单独的服务器进程或者系统来运行,正常需要许多大数据库引擎。
SQLite提供零配置,这意味着无需设置或者管理,这使得使用简单。
我们将获得一个数据库文件,所有信息都存储在唯一的文件下,它使文件可移植,与其他吐出几个文件的其他数据库。
它预先安装了Python标准库,因此我们可以使用它而无需进一步安装。
SQLite是用ANSI-C写的,这使得它更快。它还提供简单且易于使用的API,具有Python和许多其他编程语言。
SQLite可在UNIX(Linux,Mac OS-X,Android,iOS)和Windows(Win32,Wince,WinRT)上找到,因此我们使用的环境无关紧要。
SQLite也用于Google Chrome,用于存储Cookie,用户数据和其他重要数据,包括用户密码。
Android OS还使用SQLite作为其主数据库引擎来存储数据。
python sqlite3模块
要使用SQLite,我们需要在我们的系统中安装Python。
如果系统中没有安装Python,则可以引用我们的步骤教程,以在Linux中安装Python。
我们可以使用Python标准库中可用的SQLite3模块在Python中使用SQLite。
GerhardHäring写了SQLite3模块;它提供了符合DB-API 2.0的SQL接口。
它预先安装了Python标准库,因此我们不需要担心任何进一步的安装。
创建与数据库的连接
在Python中使用SQLite工作的第一步是设置与数据库的连接。
我们可以通过使用SQLite3的Connect()方法来设置连接来完成此连接。
查看以下代码以举个示例。
我们可以简单地将代码复制到IDE或者文本编辑器中并执行它。
如果我们对Python选择IDE有问题,则可以参考我们的教程比较最佳Python IDE。
建议在IDE中再次重写代码,如果要复制代码,请查看此处提供的代码的语法。
# importing the required modules import sqlite3 # setting up the connection with database conn = sqlite3.connect("sample.db") print("Successfully connected to the database") # closing the connection conn.close()
上面的程序将与SQLite数据库文件"sample.db"创建连接。
它将在终端中提供以下输出。
让我们看看上面的代码中发生了什么。
在第一行,我们导入了SQLite3模块,这我们使用Python中的SQLite数据库。
在第二行中,我们使用Connect()函数创建与名为"sample.db"的SQLite数据库文件的连接。
Connect()函数接受数据库文件作为参数的路径。
如果给定路径中的文件不存在,那么它本身将在该路径中使用给定名称创建新的数据库文件。
Connect()函数将在我们的程序中返回数据库对象;我们将返回的对象存储到名为Conn的变量中。
我们程序中的第三行是一个简单的打印语句,以显示有关成功连接的消息。
程序的最后一行使用连接对象的close()函数与数据库中的连接断开。
在前面的示例中,我们已将数据库创建到磁盘中,但我们还可以将数据库创建到主内存RAM中。
在RAM中创建数据库使数据库的执行快于通常的速度。
仍然,数据库将暂时创建,并且随着程序执行停止,它将从内存中删除数据库。
我们可以通过提供特定名称:内存:作为Connect()函数的参数来在内存中创建数据库。
请参阅以下计划作为插图。
import sqlite3 conn = sqlite3.connect(":memory:") print("\n [+] Database has been successfully created in the Memory") conn.close()
上面的程序将在RAM中创建一个数据库,我们可以使用它来执行几乎每项任务,我们可以使用在磁盘中创建的数据库。
由于某种原因创建临时虚拟数据库,此方法非常有用。
sqlite3光标
一个 cursor
该对象是我们对数据库的接口,允许运行任何 SQL query
在数据库上。
要使用SQLite3执行任何SQL脚本,我们必须需要创建游标对象。
要创建光标对象,我们需要使用连接对象的CURSOR()方法。
我们可以使用以下代码创建数据库的游标对象。
# importing the required modules import sqlite3 # setting up the connection to the database conn = sqlite3.connect("sample.db") print("\n [+] Successfully connected to the database") cur = conn.cursor() print("\n [+] Cursor has been set up successfully") cur.close() # closing the connection conn.close()
执行程序时,将看到输出,如下图所示。
让我们看看上述代码如何工作。
在上面的代码中,第一个,第二,第三,正在与数据库建立连接,如前所述。
在第四行中,我们使用了连接对象的Cursor()方法来创建游标对象,并将返回的光标对象存储在名为"cur"的变量中。
第五行是一般的print()声明。
在第六行中,我们使用光标对象的close()方法将光标对象从内存中销毁。
SQLite数据类型
在继续进一步之前,让我们首先了解SQLite数据类型。
SQLite数据库引擎有几个存储类来存储许多类型的数据,包括文本,二进制数据,整数等。
每个值都具有以下数据类型之一。
sqlite数据类型:
null:它提示,它不包含任何内容。
Integer:它存储数字值,如数字和其他整数。
真实:该值包括小数
文字:这是一个文本字符串。
blob:这是二进制数据,用于存储图像和文件。
SQLite和Python数据类型的比较
我们需要多次使用Python数据类型来存储一些SQL数据并执行一些活动。
对于这样做的事情,我们需要知道哪种SQL数据类型与哪种Python数据类型相关。
以下Python类型有点类似于SQLite数据类型:
Python类型 | sqlite类型 |
---|---|
None | NULL |
int | INTEGER |
float | REAL |
str | TEXT |
bytes | BLOB |
使用SQLite创建表
要使用SQLite创建表,我们需要在Cursor对象的execute()方法中使用SQL的Create Table语句。
SQL中Create Table语句的基本语法如下所示:
CREATE TABLE table_name( column_name Data_type constraint, ... ... ... column_name Data_type constraint );
要在Python中使用上述SQLite语句,我们需要运行以下示例程序。
它将在数据库中创建一个名为employee的表。
import sqlite3 conn = sqlite3.connect("sample.db") print("\n [+] Successfully connected to the database") cur = conn.cursor() print("\n [+] Cursor has been set up successfully") table = cur.execute(""" CREATE TABLE employee( id INT PRIMARY KEY, name CHAR(25), salary CHAR(25), joining_date DATE ); """) print("\n [+] The table has been created Successfully ") cur.close() conn.close()
在上面的程序中,我们创建了一个员工表,其中包含属性ID,名称,薪资和joining_date。
此表现在可以用于根据要求存储数据或者查询数据。
我们将看到终端中的以下输出。
在上面的代码中,我们使用了游标对象的Execute()方法来运行SQL命令以创建具有给定列的表。
在表中插入数据
我们在SQLite数据库中创建了一个表。
现在让我们使用SQL其中插入一些数据。
SQL插入语句的基本语法是: INSERT INTO table_name (columns_name_1, columns_name_2,...) VALUES (columns_data_1, columns_data_1,...)
在上面的语法中,table_name是我们想要插入数据的表的名称。
column_name_1,column_name_2,...是表中存在的列的名称。
column_data_1,column_data_2,...是我们要在给定列中插入的数据。
让我们看到一个实用的演示将数据插入表中。
使用SQLite和Python,我们将在我们的表中添加一些数据。
运行以下代码将某些数据插入表中。
import sqlite3 conn = sqlite3.connect("sample.db") print("\n [+] Successfully connected to the database") cur = conn.cursor() print("\n [+] Cursor has been set up successfully") cur.execute("INSERT INTO employee (id, name, salary, joining_date) VALUES (1001, 'David', 50000, '1-08-2019')") cur.execute("INSERT INTO employee (id, name, salary, joining_date) VALUES (1002, 'Sam', 80000, '3-09-2017')") cur.execute("INSERT INTO employee (id, name, salary, joining_date) VALUES (1003, 'Roshan', 90000, '8-08-2017')") cur.execute("INSERT INTO employee (id, name, salary, joining_date) VALUES (1004, 'Kishan', 100000, '9-09-2017')") cur.execute("INSERT INTO employee (id, name, salary, joining_date) VALUES (1005, 'Ankit', 111000, '10-05-2019')") print("\n [+] The Data has been inserted Successfully ") cur.close() conn.commit() conn.close()
上面的代码将在我们之前创建的员工表中插入一些数据。
让我们看看代码中发生了什么。
前五条线用于创建与数据库的连接并设置光标。
在六到十条的行中,我们必须使用SQL的插入命令将数据插入员工表中。
我们必须在第一个括号中使用员工表的列名称以及第二个括号中列中的列的数据。
在断开与数据库中的别的更改之前,我们只需使用连接对象的COMMIT()方法,我们所做的更改将不会保存到数据库中。
查询表中的数据
我们已经学习了如何在SQLite数据库中插入数据,但我们还需要查询来自我们的程序或者用户使用的数据库中的数据。
要查询数据,我们可以在Execute()方法下使用SQL的SELECT语句。
SELECT语句的基本语法如下所示。 SELECT columns_names FROM table_name
语法中的Columns_names将是我们需要查询的列的名称。
这些列必须存在于代替Table_name的名称的表中。
现在让我们了解我们如何使用此语法来查询来自员工表的数据。
只需运行以下代码即可查看插图。
import sqlite3 conn = sqlite3.connect("sample.db") print("\n [+] Successfully connected to the database") cur = conn.cursor() print("\n [+] Cursor has been set up successfully") cur.execute("SELECT id,name FROM employee") table = cur.fetchall() for i in table: print(i) cur.close() conn.commit() conn.close()
由上述程序提供的输出如下所示。
上面的程序将为列ID和名称查询员工表。
我们可以使用光标对象的fetchall()方法收集已返回的数据。
返回的数据是包含我们查询的行的Python列表。
要显示单个行,我们必须使用Python for循环来迭代列表;我们可以在此处了解有关Python的循环。
现在让我们看看我们可以使用SELECT语句执行的一些有用的东西。
获取所有数据表单表格
有时需要从数据库表中获取所有记录。
要使用SQL的SELECT语句获取所有记录,我们需要遵循以下给出的基本语法: SELECT * FROM table_name
*符号将用于表示所有列,并通过使用此列,我们可以查询SQLite表的所有列。
要获取我们之前创建的表员工的所有记录,我们需要运行以下代码。
import sqlite3 conn = sqlite3.connect("sample.db") print("\n [+] Successfully connected to the database") cur = conn.cursor() print("\n [+] Cursor has been set up successfully") cur.execute("SELECT * FROM employee") rows = cur.fetchall() print("\n [+] Querying the data \n") for i in rows: print(i) cur.close() conn.commit() conn.close()
上面的代码将显示我们之前创建的员工表中存在的所有记录。
程序的输出将是这样的:
以特定顺序查询数据
有时我们需要以明确的顺序从表中查询数据,如升序或者降序。
我们可以通过关键字使用单个关键字使用SELECT语句以按顺序显示数据。
在SELECT语句中按关键字的顺序基本语法为: SELECT columns_name FROM table_name ORDER BY columns_name
让我们了解我们如何通过关键字使用订单来显示来自员工表顺序的数据。
import sqlite3 conn = sqlite3.connect("sample.db") print("\n [+] Successfully connected to the database") cur = conn.cursor() print("\n [+] Cursor has been set up successfully") cur.execute("SELECT * FROM employee ORDER BY name") table = cur.fetchall() for i in table: print(i) cur.close() conn.commit() conn.close()
我们可以看到上述代码的输出,如下所示。
我们可以在输出中注意到数据以列名的升序显示。
更新表中的记录
当我们想更新我们的数据库表时,有很多情况。
例如,如果我们正在使用该数据库进行学校应用程序,那么如果学生转移到新城市,我们需要更新数据。
我们可以使用Execute()方法中的SQL的Update语句快速更新我们的数据库的任何表。
我们需要将SQL的Where子句作为选择员工的条件。
更新语句的基本语法如下所示。 UPDATE table_name SET update_required WHERE Some_condition
请参阅以下示例作为更新语句的图示。
import sqlite3 conn = sqlite3.connect("sample.db") print("\n [+] Successfully connected to the database") cur = conn.cursor() print("\n [+] Cursor has been set up successfully") print("\n [+] Data Before Update\n") cur.execute("SELECT * FROM employee") before = cur.fetchall() for i in before: print(i) cur.execute("UPDATE employee SET name = 'Aditya' where name = 'Sam'") print("\n [+] Data After Update\n") cur.execute("SELECT * FROM employee") after = cur.fetchall() for i in after: print(i) cur.close() conn.commit() conn.close()
上述程序将更新表员工。
它将名称SAM替换为Aditya,无论在表格中显示。