使用Python连接SQLite数据库的操作步骤

 更新时间:2024年12月26日 10:41:09   作者:程序员黄同学  
SQLite是一种轻量级的嵌入式数据库,广泛应用于各种应用程序中,Python提供了内置的sqlite3模块,使得连接和操作SQLite数据库变得非常简单,本文给大家介绍了使用Python连接SQLite数据库的操作步骤,需要的朋友可以参考下

SQLite是一种轻量级的嵌入式数据库,广泛应用于各种应用程序中。

Python提供了内置的sqlite3模块,使得连接和操作SQLite数据库变得非常简单。

下面我将详细介绍如何使用sqlite3模块来连接SQLite数据库,并提供一些实际开发中的建议和注意事项。

1. 使用 sqlite3 连接SQLite数据库

sqlite3 是Python标准库中的一个模块,无需额外安装即可使用。

连接数据库

下面是一个简单的示例,展示如何连接到SQLite数据库:

import sqlite3
 
# 创建数据库连接
conn = sqlite3.connect('example.db')
 
# 创建游标对象
cur = conn.cursor()
 
# 创建表
cur.execute('''CREATE TABLE IF NOT EXISTS users (
                    id INTEGER PRIMARY KEY,
                    name TEXT NOT NULL,
                    email TEXT NOT NULL)''')
 
# 插入数据
cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
 
# 提交事务
conn.commit()
 
# 查询数据
cur.execute("SELECT * FROM users")
rows = cur.fetchall()
 
for row in rows:
    print(row)
 
# 关闭游标和连接
cur.close()
conn.close()

注意事项

  • 错误处理:在实际开发中,应该添加错误处理机制,以防止数据库操作失败或其他异常情况。
import sqlite3
 
try:
    conn = sqlite3.connect('example.db')
    cur = conn.cursor()
    cur.execute('''CREATE TABLE IF NOT EXISTS users (
                        id INTEGER PRIMARY KEY,
                        name TEXT NOT NULL,
                        email TEXT NOT NULL)''')
    cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
    cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
    conn.commit()
    cur.execute("SELECT * FROM users")
    rows = cur.fetchall()
    for row in rows:
        print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")
finally:
    if cur:
        cur.close()
    if conn:
        conn.close()
  • 上下文管理器:为了确保资源被正确释放,可以使用上下文管理器(with语句)来管理数据库连接和游标。
import sqlite3
 
try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
            conn.commit()
            cur.execute("SELECT * FROM users")
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")

2. 使用参数化查询

为了避免SQL注入攻击,应该使用参数化查询。

import sqlite3
 
try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
            conn.commit()
            cur.execute("SELECT * FROM users WHERE name = ?", ('Alice',))
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")

3. 使用事务

SQLite支持事务操作,可以通过事务来确保数据的一致性和完整性。

import sqlite3
 
try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            conn.execute("BEGIN TRANSACTION")
            try:
                cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
                cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
                conn.commit()
            except sqlite3.Error as e:
                conn.rollback()
                print(f"Error: {e}")
            cur.execute("SELECT * FROM users")
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")

实际开发中的建议

  1. 错误处理:始终添加错误处理机制,以确保在数据库操作失败时能够捕获并处理异常。
  2. 资源管理:使用上下文管理器来管理数据库连接和游标,确保资源被正确释放。
  3. 参数化查询:使用参数化查询来防止SQL注入攻击,确保数据库操作的安全性。
  4. 事务管理:合理使用事务来确保数据的一致性和完整性。
  5. 日志记录:在生产环境中,添加日志记录机制,以便在出现问题时能够追踪和调试。

在Python中连接SQLite数据库,sqlite3 模块提供了一个简单且强大的接口。通过合理使用上下文管理器、参数化查询和事务管理,可以提高代码的健壮性和性能,确保数据库操作的安全性和可靠性。在实际开发中,应该注意错误处理、资源管理和日志记录,以确保系统的稳定性和可维护性。

通过这些方法和技巧,你可以有效地连接和管理SQLite数据库,满足各种复杂的需求。

拓展:Python操作SQLite数据库

创建SQLite数据库

在IDE或文本编辑器中创建一个新的Python文件,把此文件命名为python\_database.py

首先,将SQLite模块导入到我们的项目中:

import sqlite3

由于Python内置了SQLite3,不需要安装任何东西。接下来,需要创建数据库和与文件的连接。

db = sqlite3.connect('db.sqlite3')
cursor = db.cursor()

上面的代码分配了两个变量,第一个变量db调用了sqlite3.connect,它会连接到文件,这里在括号内告诉Python我们想要命名数据库。

cursor变量设置为db.cursor(),Python使用它来读取和写入数据库文件表。

然后需要实际创建表,可以通过以下代码来完成:

cursor.execute('''
            CREATE TABLE IF NOT EXISTS contacts(
                id INTEGER PRIMARY KEY,
                firstName TEXT,
                lastName TEXT,
                age TEXT,
                address TEXT,
                jobTitle TEXT)''')
db.commit()

解释一下上面的代码:

调用cursor.execute来在db.sqlite3数据库文件中写入一个新表。创建的表名为contactsCREATE TABLE IF NOT EXISTS行创建表(如果它还不存在于你的Python文件目录中)。

下面几行分配表头名称给每列,还必须指定每列中将放入什么类型的数据。

下面列出了不同的数据类型:

  • NULL,该值是个NULL值。

  • INTEGER,该值是个有符号整数,根据值的大小,以1、2、3、4、6或8个字节的形式存储。

  • REAL,该值是个浮点值,存储为8个字节的IEEE浮点数。

  • TEXT,该值是个文本字符串,使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储。

  • BLOB,该值是数据的二进制大对象,以原始形式存储。

有一个名为id的列,为其分配了INTEGER PRIMARY KEY值。这对数据库来说是必需的,以便为每个条目分配唯一的ID,SQLite会自动增加每个新条目,每次添加新条目时SQLite都会自动将每个条目递增1。(在创建其他表之间的关系时,也需要使用此功能)。

创建的下一组标题包括firstNamelastNameageaddressjobTitle,由此构建一个简单的联系人数据库,调用db.commit()将表提交到数据库文件中。

现在向新表中输入一些假数据,可以编写一些 SQL 代码,如下所示:

cursor.execute('''INSERT INTO contacts(firstName, lastName, age, address, jobTitle) VALUES (?, ?, ?, ?, ?)''', ('Grant', 'Peach', '35', '1 Smith Street', 'Software Dev'))
db.commit()

如果运行上面的代码,Python将执行SQL并把条目插入到表中正确的标题中。

为了使它变得稍微简单一些,下面画了一个图表,说明了它是如何工作的:

每个?都是一个占位符,用于向标题输入条目,因此也可以使用变量来输入数据,例如来自用户输入等。

SQLite数据库阅读器

如果想知道数据是否输入到数据库中,可以通过多种方式检查这一点,但是需要一些其他软件来完成这个操作,这取决于操作系统甚至IDE可以使用什么来完成这个操作。

MacOS SQLite数据库阅读器

  • Base(£19.99或通过SetApp获得)

  • 适用于 SQLite 的 DB 浏览器(免费)

Windows SQLite数据库阅读器

  • 适用于 SQLite 的 DB 浏览器(免费)

  • SQLite阅读器(升级需要费用)

Linux SQLite数据库阅读器

  • 适用于 SQLite 的 DB 浏览器(免费)

安装其中一个阅读器,并加载数据库文件,应该会看到类似于下面屏幕截图的GUI:

并且能够看到创建的表以及所有的标题,如果单击浏览数据选项卡,就会看到表格中包含通过代码分配给每个标题的内容,如下所示:

DB Browser是编辑数据以及通过CSV文件加载大量数据的真正有用工具,也可以在具有专业版的Pycharm IDE中执行此操作。

查找数据

现在已经知道如何输入数据以及查看它是否实际位于我们的数据库中,来返回到代码并创建一个函数,可以搜索数据库并显示输出。

删除代码中的数据输入部分,因为我们不再需要它(或者直接注释),构建搜索函数,此函数将搜索任何给定的第一个名字并返回该行数据。

def search_db(first_name):
        cursor.execute("SELECT * FROM contacts WHERE firstName  LIKE '%' || ? || '%'", (first_name,))
        results = cursor.fetchall()
        print('Results Found...\n')
        print(results)
 
search_db('Grant')

运行上面的代码会输出以下内容:

解释一下代码:

cursor.execute("SELECT * FROM contacts WHERE firstName  LIKE '%' || ? || '%'", (first_name,))

上面的代码从 contacts 表中选择所有内容,其中 firstName 列中包含搜索到的首字母。然后创建了一个叫做results的变量,通过 cursor.fetchall() 将结果分配给该变量,然后在终端中打印出结果。

以上就是使用Python连接SQLite数据库的操作步骤的详细内容,更多关于Python连接SQLite的资料请关注脚本之家其它相关文章!

相关文章

  • Python实现矩阵转置的几种方法详解

    Python实现矩阵转置的几种方法详解

    这篇文章主要介绍了Python实现矩阵转置的几种方法详解,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存,需要的朋友可以参考下
    2023-08-08
  • Python实现PDF页面的删除与添加功能

    Python实现PDF页面的删除与添加功能

    在处理PDF文档的过程中,我们时常会需要对PDF文档中的页面进行编辑操作的情况,如插入和删除页面,通过添加和删除PDF页面,我们可以增加内容或对不需要的内容进行删除,本文将介绍如何使用Python代码实现在PDF文档中添加和删除页面
    2024-04-04
  • 用python写一个windows消息提醒小程序

    用python写一个windows消息提醒小程序

    上班时,由于自己经常coding到忘记时间,经常会一坐坐很久,搞的劳资腰都不好了,所以没事闲的写了个久坐提醒的小程序,文中有详细的代码示例,讲解的非常详细,感兴趣的朋友可以参考下
    2023-12-12
  • 新手入门Python编程的8个实用建议

    新手入门Python编程的8个实用建议

    这篇文章主要介绍了Python编程的8个实用建议,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python Django搭建网站流程图解

    Python Django搭建网站流程图解

    这篇文章主要介绍了Python Django搭建网站流程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python调用百度AI实现图片上表格识别功能

    Python调用百度AI实现图片上表格识别功能

    这篇文章主要给大家介绍了关于Python调用百度AI实现图片上表格识别功能的相关资料,在Python环境下,利用百度AI开放平台文字识别技术,对表格类图片进行识别,需要的朋友可以参考下
    2021-09-09
  • Python numpy有哪些常用数据类型

    Python numpy有哪些常用数据类型

    Numpy提供了两种基本的对象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数
    2023-02-02
  • python字符串操作详析

    python字符串操作详析

    这篇文章主要介绍了python字符串操作,字符串是不可变类型可以重新赋值,但不可以索引改变其中一个值,只能拼接字符串建立新变量,下面来了解具体内容吧,需要的小伙伴可以参考一下
    2022-02-02
  • PyQt转换路径中的斜杠(斜杠(/)与反斜杠(\)转换)

    PyQt转换路径中的斜杠(斜杠(/)与反斜杠(\)转换)

    本文主要介绍了PyQt转换路径中的斜杠(斜杠(/)与反斜杠(\)转换),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Python利用wxPython制作一个有趣的验证码生成器

    Python利用wxPython制作一个有趣的验证码生成器

    这篇文章主要为大家详细介绍了Python如何利用wxPython制作一个简单有趣的验证码生成器,文中的示例代码讲解详细,需要的小伙伴可以了解一下
    2023-04-04

最新评论