SQLite 与 Python,Python项目中充分利用SQLite的综合指南

22,607次阅读
没有评论

共计 5315 个字符,预计需要花费 14 分钟才能阅读完成。

SQLite 是一种轻量级、无服务器、独立的关系数据库管理系统,由于其简单、高效且占用空间紧凑,在许多应用程序中常用。

本综合指南将探讨如何在 Python 项目中充分利用 SQLite 来深入创建、访问、修改和管理数据库信息。

在 Python 中设置 SQLite

要在 Python 中使用 SQLite,我们首先需要导入 sqlite3 模块。这是 Python 内置的:

import sqlite3

sqlite3 模块提供了从 Python 连接、创建 SQLite 数据库并与之交互所需的所有 API 和工具。

要连接到 SQLite 数据库(如果不存在则创建一个),请使用 sqlite3.connect() 方法:

import sqlite3
db = sqlite3.connect('database.db')

这将打开与数据库文件 database.db 的连接并返回代表数据库的连接对象。如果该文件不存在,SQLite 将自动创建它。

一旦我们完成与数据库的交互,关闭连接是一个很好的做法。这可以通过 close() 方法来完成:

db.close()

创建表

要在 SQLite 中创建表,我们必须执行 CREATE TABLE SQL 语句。这是通过首先从数据库连接获取游标对象来完成的,这使我们能够执行 SQL:

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

然后我们可以使用游标的 execute() 方法执行 CREATE TABLE 语句:

cursor.execute("""
  CREATE TABLE inventory (
    id integer PRIMARY KEY,
    name text NOT NULL,
    quantity integer,
    price real
  )
""")

这将创建一个包含 ID、名称、数量和价格列的库存表。请注意,我们定义了每列的数据类型。

执行 SQL 后,必须将更改提交到数据库。这会保留更改:

db.commit()

让我们将其放在一个函数中来封装表创建逻辑:

def create_table():
  db = sqlite3.connect('database.db')
  cursor = db.cursor()
  cursor.execute("""
    CREATE TABLE IF NOT EXISTS inventory (
      id integer PRIMARY KEY,
      name text NOT NULL,
      quantity integer,
      price real
    )
  """)
  db.commit()
  db.close()

我们使用 CREATE TABLE IF NOT EXISTS,因此如果表已经存在,尝试再次创建该表不会导致错误。

插入数据

要将数据插入表中,我们可以再次使用 execute() 方法执行 SQL 语句。SQLite 有一个 INSERT INTO 语句,允许插入新行:

INSERT INTO inventory VALUES (1, 'Bananas', 150, 1.49)

这将插入一个新行,id 为 1,名称为 Bananas,数量为 150,价格为 1.49。

虽然我们可以使用字符串格式插入数据,但更好的方法是使用可以安全地将值与查询分开的查询参数:

data = (2, 'Oranges', 200, 2.49)
cursor.execute("INSERT INTO inventory VALUES (?, ?, ?, ?)", data)

他们?充当值的占位符。这有助于防止 SQL 注入攻击。

我们可以编写一个函数来插入数据:

def insert_data(values):
  db = sqlite3.connect('database.db')
  cursor = db.cursor()
  cursor.execute("INSERT INTO inventory VALUES (?, ?, ?, ?)", values)
  db.commit()
  db.close()
# Usage:
insert_data((3, 'Apples', 75, 1.25))

这封装了插入逻辑,同时允许我们干净地将数据作为元组传递。

查看数据

我们可以使用 SELECT 语句从数据库中查询和获取数据。例如,要获取所有行:

SELECT * FROM inventory

我们可以执行此查询,然后使用 cursor.fetchall() 以元组形式检索结果集:

def get_all_data():
  db = sqlite3.connect('database.db')
  cursor = db.cursor()
  cursor.execute("SELECT * FROM inventory")
  rows = cursor.fetchall()
  db.close()
  return rows

这将以元组列表的形式返回完整的结果集,每个元组代表一行及其值。

我们可以将参数传递给 SELECT 查询来过滤结果:

def get_by_name(name):
  db = sqlite3.connect('database.db')
  cursor = db.cursor()
  cursor.execute("SELECT * FROM inventory WHERE name=?", (name,))
  row = cursor.fetchone()  
  db.close()
  return row

这允许我们按名称检索特定行。cursor.fetchone() 仅返回第一个结果。

更新数据

要修改现有数据,我们可以使用 UPDATE 语句:

UPDATE inventory SET quantity = 200 WHERE name = 'Bananas'

这会将香蕉的数量更新为 200。

我们可以编写一个函数来处理更新逻辑:

def update_data(new_quantity, name):
  db = sqlite3.connect('database.db')
  cursor = db.cursor()
  cursor.execute("UPDATE inventory SET quantity =? WHERE name=?",
                 (new_quantity, name))
  db.commit()
  db.close()
# Usage:  
update_data(350, 'Bananas')

与插入类似,这使用查询参数安全地传入值。

删除数据

可以使用 DELETE 语句删除行:

DELETE FROM inventory WHERE name = 'Oranges'

这将删除橙色行。

下面是我们如何实现删除功能:

def delete_data(name):
  db = sqlite3.connect('database.db')
  cursor = db.cursor()
  cursor.execute("DELETE FROM inventory WHERE name=?", (name,))
  db.commit()
  db.close()
# Usage:
delete_data('Oranges')

同样,使用查询参数可以避免漏洞并使代码更易于维护。

使用 Sqlite3 构建

首先,请在此处克隆存储库并按照教程进行操作。尽管这是初学者课程,但您必须对 SQL 有一点了解才能完成。

第一步是导入 sqlite3 模块:

import sqlite3

这使我们能够访问 Python 中的所有 SQLite 数据库功能。

创建表

接下来,定义 create_table() 函数来创建一个名为 store 的表,其中包含项目、数量和价格列:

def create_table():
  new_data = sqlite3.connect('data_base1')
  change = new_data.cursor()
  change.execute("CREATE TABLE IF NOT EXISTS store (item TEXT, quantity INTEGER, price REAL)")
  new_data.commit()
  new_data.close()

分解一下:

  • sqlite3.connect() 打开到数据库文件的连接。

  • new_data.cursor() 获取一个游标对象来执行 SQL。

  • execute() 运行 CREATE TABLE 查询。

  • commit() 保存更改。

  • close() 关闭连接。

插入数据

item() 函数处理将数据插入表中:

def item(item, quantity, price):
  new_data = sqlite3.connect('data_base1')
  change = new_data.cursor()
  change.execute("INSERT INTO store VALUES(?,?,?)", (item, quantity, price))
  new_data.commit()
  new_data.close()

它以项目、数量和价格作为参数。INSERT 查询使用占位符 ? 将这些值安全地插入到新行中。

查看数据

为了查询数据,定义了 view() 函数:

def view():
  new_data = sqlite3.connect('data_base1')
  change = new_data.cursor()
  change.execute("SELECT * FROM store")
  rows = change.fetchall()
  change.close()
  return rows

它使用 SELECT * 选择所有行,使用 fetchall() 获取结果,然后返回它们。

删除数据

要按项目名称删除行,请使用 delete() 函数:

def delete(item):
  new_data = sqlite3.connect('data_base1')
  change = new_data.cursor()
  change.execute("DELETE FROM store WHERE item =?", (item,))  
  new_data.commit()
  new_data.close()

WHERE 子句通过项目名称标识要删除的行。

更新数据

最后,update() 可以修改给定商品的数量和价格:

def update(quantity, price, item):
  new_data = sqlite3.connect('data_base1')
  change = new_data.cursor()
  change.execute("UPDATE store SET quantity =?, price =? WHERE item=?",
                (quantity, price, item))
  new_data.commit()
  new_data.close()

SET 子句指定要更新的列,WHERE 标识行。

包起来

总之,在 Python 中使用 SQLite 数据库的关键步骤是:

  1. 将 sqlite3 模块导入到您的项目中。

  2. 使用 sqlite3.connect() 创建数据库连接。

  3. 从连接中获取游标来执行 SQL 语句。

  4. 构造 SQL 查询并使用游标来执行它们。

  5. 对于插入、更新和删除 – 提交更改以保留它们。

  6. 对于查询,使用 cursor.fetchone() 或 cursor.fetchall() 来检索结果。

  7. 完成后关闭数据库连接。

  8. 使用查询参数而不是连接值来避免 SQL 注入。

  9. 将数据库逻辑和查询封装在函数中以实现可重用。

有了这些概念,您就可以利用 SQLite 和 Python 的强大功能构建强大的应用程序。SQLite3 模块和 SQL 使您可以完全控制创建、修改和查询数据库信息。

SQLite 支持更高级的功能,如事务、隔离级别、备份和加密。请务必参阅官方 SQLite 文档以利用完整功能。

我希望这份综合指南能让您全面了解如何将 SQLite 集成到您的 Python 项目中!如果您还有其他问题,请告诉我。

我希望您喜欢阅读本指南,并有动力开始您的 Python 编程之旅。

如果你喜欢我的工作并且想帮助我继续删除这样的内容,请给我买杯 咖啡。

文章来源地址 https://www.toymoban.com/diary/python/396.html

到此这篇关于 SQLite 与 Python,Python 项目中充分利用 SQLite 的综合指南的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计5315字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)