目录
核心要点
什么是SQLite?
Python的SQLite接口
开始使用sqlite3
创建、读取和修改记录
占位符
事务
结论
关于使用SQLite和Python的常见问题
首页 后端开发 Python教程 python的sqlite介绍

python的sqlite介绍

Feb 18, 2025 am 11:21 AM

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

热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.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

什么是正则表达式? 什么是正则表达式? Mar 20, 2025 pm 06:25 PM

正则表达式是在编程中进行模式匹配和文本操作的强大工具,从而提高了各种应用程序的文本处理效率。

Python中如何通过字符串动态创建对象并调用其方法? Python中如何通过字符串动态创建对象并调用其方法? Apr 01, 2025 pm 11:18 PM

在Python中,如何通过字符串动态创建对象并调用其方法?这是一个常见的编程需求,尤其在需要根据配置或运行...

哪些流行的Python库及其用途? 哪些流行的Python库及其用途? Mar 21, 2025 pm 06:46 PM

本文讨论了诸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和请求等流行的Python库,并详细介绍了它们在科学计算,数据分析,可视化,机器学习,网络开发和H中的用途

See all articles