搜索
首页后端开发Python教程python的sqlite介绍

An Introduction to SQLite with Python

本文将深入探讨SQLite数据库及其与Python的结合使用。我们将学习如何通过Python的sqlite3库操作SQLite数据库,并最终探索sqlite3提供的一些高级特性来简化我们的工作。

注意:在开始之前,最好熟悉SQL。如果您不熟悉,可以参考Simply SQL学习。

核心要点

  • SQLite是一个轻量级的、基于文件的关联式数据库管理系统,因其简单易用和配置简便而常用于Python应用程序。它支持并发访问,允许多个进程或线程访问同一个数据库。然而,它缺乏多用户功能,并且不像MySQL或PostgreSQL等其他数据库技术那样可以作为进程进行管理。
  • Python中的sqlite3模块为SQLite提供了SQL接口,并且随Python预安装。它允许用户创建数据库、连接到数据库、创建表、插入数据和执行SQL命令。该模块还支持占位符,允许在SQL命令中进行参数替换,从而更轻松地将变量插入查询中。
  • SQLite中的事务是一系列数据库操作,被视为一个单元,以确保数据完整性。Python的sqlite3模块在执行INSERT、UPDATE、DELETE或REPLACE语句之前启动事务。用户必须调用commit()方法来保存事务期间所做的更改,并且可以通过在连接到数据库时将isolation_level设置为None来显式地处理事务。

什么是SQLite?

SQLite的座右铭是:“小巧、快速、可靠。三选其二。”

SQLite是一个用C语言编写的嵌入式数据库库。您可能熟悉其他数据库技术,例如MySQL或PostgreSQL。这些技术使用客户端-服务器方法:数据库作为服务器安装,然后使用客户端连接到它。SQLite则不同:它被称为嵌入式数据库,因为它作为库包含在程序中。所有数据都存储在一个文件中——通常扩展名为.db——并且您可以使用函数来运行SQL语句或对数据库执行任何其他操作。

基于文件的存储解决方案还提供并发访问,这意味着多个进程或线程可以访问同一个数据库。那么,SQLite的用途是什么?它适用于任何类型的应用程序吗?

SQLite在以下几种情况下表现出色:

  • 由于包含在大多数移动操作系统(如Android和iOS)中,如果您需要一个独立的、无服务器的数据存储解决方案,SQLite可能是一个完美的选择。
  • 与使用大型CSV文件相比,您可以利用SQL的强大功能并将所有数据放入单个SQLite数据库中。
  • SQLite可用于存储应用程序的配置数据。事实上,SQLite比基于文件的系统(如配置文件)快35%。

另一方面,有哪些不选择SQLite的原因呢?

  • 与MySQL或PostgreSQL不同,SQLite缺乏多用户功能。
  • SQLite仍然是一个基于文件的数据库,而不是服务。您不能将其作为进程管理,也不能启动、停止它或管理资源使用情况。

Python的SQLite接口

正如我在引言中提到的,SQLite是一个C库。但是,有很多语言都编写了接口,包括Python。sqlite3模块提供了一个SQL接口,并且至少需要SQLite 3.7.15。

令人惊奇的是,sqlite3随Python一起提供,因此您无需安装任何内容。

开始使用sqlite3

是时候编写代码了!在第一部分中,我们将创建一个基本的数据库。首先要做的是创建一个数据库并连接到它:

import sqlite3
dbName = 'database.db'

try:
  conn = sqlite3.connect(dbName)
  cursor = conn.cursor()
  print("Database created!")

except Exception as e:
  print("Something bad happened: ", e)
  if conn:
    conn.close()

在第1行,我们导入sqlite3库。然后,在一个try/except代码块中,我们调用sqlite3.connect()来初始化与数据库的连接。如果一切顺利,conn将是Connection对象的实例。如果try失败,我们将打印收到的异常,并关闭与数据库的连接。正如官方文档中所述,每个打开的SQLite数据库都由一个Connection对象表示。每次我们必须执行SQL命令时,Connection对象都有一个名为cursor()的方法。在数据库技术中,游标是一种控制结构,它允许遍历数据库中的记录。

现在,如果我们执行这段代码,我们应该得到以下输出:

<code>> Database created!</code>

如果我们查看Python脚本所在的文件夹,应该会看到一个名为database.db的新文件。此文件是由sqlite3自动创建的。

创建、读取和修改记录

此时,我们准备创建一个新表,添加第一个条目并执行SQL命令,如SELECT、UPDATE或DROP。

要创建表,我们只需要执行一个简单的SQL语句。在这个例子中,我们将创建一个students表,其中包含以下数据:

id name surname
1 John Smith
2 Lucy Jacobs
3 Stephan Taylor

print("Database created!")行之后,添加以下内容:

import sqlite3
dbName = 'database.db'

try:
  conn = sqlite3.connect(dbName)
  cursor = conn.cursor()
  print("Database created!")

except Exception as e:
  print("Something bad happened: ", e)
  if conn:
    conn.close()

我们创建了一个表并调用cursor.execute()方法,当我们想要执行单个SQL语句时使用此方法。

然后,我们为要添加的每一行执行一个INSERT操作。完成所有更改后,我们调用conn.commit()将挂起的事务提交到数据库。如果不调用commit()方法,对数据库的任何挂起更改都将丢失。最后,我们通过调用conn.close()方法关闭与数据库的连接。

好的,现在让我们查询我们的数据库!我们需要一个变量来保存查询的结果,所以让我们将cursor.execute()的结果保存到名为records的变量中:

<code>> Database created!</code>

执行此操作后,我们将看到所有记录输出到标准输出:

# 创建操作
create_query = '''CREATE TABLE IF NOT EXISTS student(
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  surname TEXT NOT NULL);
  '''
cursor.execute(create_query)
print("Table created!")

# 插入和读取操作
cursor.execute("INSERT INTO student VALUES (1, 'John', 'Smith')")
print("Insert #1 done!")
cursor.execute("INSERT INTO student VALUES (2, 'Lucy', 'Jacobs')")
print("Insert #2 done!")
cursor.execute("INSERT INTO student VALUES (3, 'Stephan', 'Taylor')")
print("Insert #3 done!")
conn.commit()
conn.close()

此时,您可能已经注意到,在cursor.execute()方法中,我们放置了必须执行的SQL命令。如果我们想要执行另一个SQL命令(如UPDATE或DROP),Python语法不会发生任何变化。

占位符

cursor.execute()方法需要一个字符串作为参数。在上一节中,我们看到了如何将数据插入到我们的数据库中,但是所有内容都是硬编码的。如果我们需要将变量中的内容存储到数据库中怎么办?为此,sqlite3有一些称为占位符的巧妙功能。占位符允许我们使用参数替换,这将使将变量插入查询变得更容易。

让我们看看这个例子:

records = cursor.execute("SELECT * FROM student")
for row in records:
  print(row)

我们创建了一个名为insert_command()的方法。此方法接受四个参数:第一个参数是一个Connection实例,另外三个将在我们的SQL命令中使用。

command变量中的每个?都代表一个占位符。这意味着,如果您使用student_id=1name='Jason'surname='Green'调用insert_command函数,则INSERT语句将变为INSERT INTO student VALUES(1, 'Jason', 'Green')

当我们调用execute()函数时,我们传递我们的命令和所有将被替换为占位符的变量。从现在开始,每次我们需要在student表中插入一行时,我们都将使用所需的参数调用insert_command()方法。

事务

即使您不是事务定义的新手,我也会快速回顾一下它的重要性。事务是在数据库上执行的一系列操作,在逻辑上被视为一个单元。

事务最重要的优点是确保数据完整性。在我们上面介绍的示例中,它可能没有用,但是当我们处理存储在多个表中的更多数据时,事务确实会产生影响。

Python的sqlite3模块在execute()executemany()执行INSERT、UPDATE、DELETE或REPLACE语句之前启动事务。这意味着两件事:

  • 我们必须注意调用commit()方法。如果我们在不执行commit()的情况下调用Connection.close(),我们在事务期间所做的所有更改都将丢失。
  • 我们不能在同一个进程中使用BEGIN打开事务。

解决方案?显式处理事务。

如何?通过使用函数调用sqlite3.connect(dbName, isolation_level=None)而不是sqlite3.connect(dbName)。通过将isolation_level设置为None,我们强制sqlite3永远不会隐式打开事务。

以下代码是对先前代码的重写,但显式使用了事务:

import sqlite3
dbName = 'database.db'

try:
  conn = sqlite3.connect(dbName)
  cursor = conn.cursor()
  print("Database created!")

except Exception as e:
  print("Something bad happened: ", e)
  if conn:
    conn.close()

结论

我希望您现在已经很好地理解了什么是SQLite,如何将其用于您的Python项目,以及其一些高级功能的工作方式。显式管理事务起初可能有点棘手,但它肯定可以帮助您充分利用sqlite3

相关阅读:

  • 开始使用SQLite3:基本命令
  • 使用unittest和pytest进行Python单元测试入门
  • 使用SQLite管理iOS应用程序中的数据
  • HTTP Python请求初学者指南
  • SQL与NoSQL:区别

关于使用SQLite和Python的常见问题

什么是SQLite,为什么我要将它与Python一起使用?SQLite是一个轻量级的、基于文件的关联式数据库管理系统。由于其简单性和最少的配置,它被广泛用于嵌入式数据库应用程序。将SQLite与Python一起使用提供了一种方便的方法,可以将数据库集成到Python应用程序中,而无需单独的数据库服务器。

如何在Python中连接到SQLite数据库?您可以使用sqlite3模块(随Python预安装)连接到SQLite数据库。使用connect()方法建立连接并获取连接对象,然后创建一个游标来执行SQL命令。

如何使用Python在SQLite数据库中创建表?您可以使用游标对象上的execute()方法运行SQL命令。要创建表,请使用CREATE TABLE语句。

如何使用Python将数据插入SQLite表中?使用INSERT INTO语句将数据插入表中。占位符%s?可用于参数化查询,以避免SQL注入。

如何在Python中使用SQLite事务?SQLite中的事务使用连接对象上的commit()rollback()方法进行管理。将多个SQL命令放在begincommit之间,以确保它们被视为单个事务处理。

以上是python的sqlite介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python的主要目的:灵活性和易用性Python的主要目的:灵活性和易用性Apr 17, 2025 am 12:14 AM

Python的灵活性体现在多范式支持和动态类型系统,易用性则源于语法简洁和丰富的标准库。1.灵活性:支持面向对象、函数式和过程式编程,动态类型系统提高开发效率。2.易用性:语法接近自然语言,标准库涵盖广泛功能,简化开发过程。

Python:多功能编程的力量Python:多功能编程的力量Apr 17, 2025 am 12:09 AM

Python因其简洁与强大而备受青睐,适用于从初学者到高级开发者的各种需求。其多功能性体现在:1)易学易用,语法简单;2)丰富的库和框架,如NumPy、Pandas等;3)跨平台支持,可在多种操作系统上运行;4)适合脚本和自动化任务,提升工作效率。

每天2小时学习Python:实用指南每天2小时学习Python:实用指南Apr 17, 2025 am 12:05 AM

可以,在每天花费两个小时的时间内学会Python。1.制定合理的学习计划,2.选择合适的学习资源,3.通过实践巩固所学知识,这些步骤能帮助你在短时间内掌握Python。

Python与C:开发人员的利弊Python与C:开发人员的利弊Apr 17, 2025 am 12:04 AM

Python适合快速开发和数据处理,而C 适合高性能和底层控制。1)Python易用,语法简洁,适用于数据科学和Web开发。2)C 性能高,控制精确,常用于游戏和系统编程。

Python:时间投入和学习步伐Python:时间投入和学习步伐Apr 17, 2025 am 12:03 AM

学习Python所需时间因人而异,主要受之前的编程经验、学习动机、学习资源和方法及学习节奏的影响。设定现实的学习目标并通过实践项目学习效果最佳。

Python:自动化,脚本和任务管理Python:自动化,脚本和任务管理Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Python和时间:充分利用您的学习时间Python和时间:充分利用您的学习时间Apr 14, 2025 am 12:02 AM

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python:游戏,Guis等Python:游戏,Guis等Apr 13, 2025 am 12:14 AM

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版