利用Python实现sqlite3增删改查的封装

yizhihongxing

下面我详细讲解一下“利用Python实现sqlite3增删改查的封装”的完整攻略。

1. sqlite3简介

sqlite3是一款轻量级、嵌入式的关系型数据库。它无需单独的服务器进程,数据存储在本地文件中,因此非常适合于需要本地数据存储需求的应用程序。

2. Python的sqlite3模块

Python标准库中自带sqlite3模块,使用sqlite3模块可以非常方便地操作sqlite3数据库。sqlite3模块封装了大量常用的数据库操作,同时也支持执行SQL语句。

3. sqlite3增删改查的封装

对于一个sqlite3数据库的常规操作,需要执行SQL语句,其中有许多类型的语句,而我们对每一个操作都进行封装,可以较好的避免SQL注入攻击,同时降低了代码的复杂度。

以下是一个对于增删改查操作的封装:

import sqlite3

class Db:
    def __init__(self, dbname):
        self.conn = sqlite3.connect(dbname)

    def get_conn(self):
        return self.conn

    def close_conn(self):
        self.conn.close()

    def create_table(self, table_name, fields_list):
        sql_create_table = f"CREATE TABLE IF NOT EXISTS {table_name}("
        for field in fields_list:
            sql_create_table += f"{field['name']} {field['type']},"
        sql_create_table = sql_create_table.rstrip(',') + ")"
        self.conn.execute(sql_create_table)

    def insert(self, table_name, fields, values):
        sql_insert = f"INSERT INTO {table_name} ({','.join(fields)}) VALUES ({','.join(['?']*len(values))})"
        self.conn.execute(sql_insert, values)

    def delete(self, table_name, condition):
        sql_delete = f"DELETE FROM {table_name} WHERE {condition}"
        self.conn.execute(sql_delete)

    def update(self, table_name, set_expression, condition):
        sql_update = f"UPDATE {table_name} SET {set_expression} WHERE {condition}"
        self.conn.execute(sql_update)

    def select(self, table_name, fields, condition=None, limit=None):
        sql_select = f"SELECT {','.join(fields)} FROM {table_name}"
        if condition:
            sql_select += f" WHERE {condition}"
        if limit:
            sql_select += f" LIMIT {limit}"
        res = self.conn.execute(sql_select).fetchall()
        return res

上述代码中,我们定义了一个Db类,其中包含了数据库连接、建表、插入、删除、更新、查询等常用操作的封装。在使用时,只需实例化Db类,即可对数据库进行增删改查等操作。

4. 示例说明

示例一:创建数据库及表

db = Db('test.db')
fields_list = [
    {'name': 'id', 'type': 'INTEGER PRIMARY KEY'},
    {'name': 'name', 'type': 'VARCHAR(20)'},
    {'name': 'gender', 'type': 'VARCHAR(4)'},
    {'name': 'age', 'type': 'INTEGER'}
]
db.create_table('user', fields_list)
db.close_conn()

上述代码中,我们通过实例化Db类,并执行create_table方法,创建了一个名称为user的表,并指定了该表的字段及其类型。

示例二:添加数据

db = Db('test.db')
fields = ['name', 'gender', 'age']
values = ['Tom', '男', 20]
db.insert('user', fields, values)
db.close_conn()

通过实例化Db类,我们执行了一条添加数据的语句。在该方法中,我们指定了表名、字段及其对应的值。

至此,通过对上述示例代码的分析,我们可以看到,利用Python实现sqlite3增删改查的封装的过程,其实并不复杂。我们只需对常见的数据库操作进行封装即可,这样可以减少代码的复杂度,降低了代码出错的概率,在实际开发应用中,带来了更好的灵活性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python实现sqlite3增删改查的封装 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 如何利用Boost.Python实现Python C/C++混合编程详解

    如何利用Boost.Python实现PythonC/C++混合编程详解 在本攻略中,我们将介绍如何使用Boost.Python库实现PythonC/C++混合编程。我们将提供两个示例,演示如何使用Boost.Python库实现PythonC/C++混合编程。 问题描述 在软件开发中,Python和C/C++是两种非常常见的编程语言。有时候,我们需要将Pyth…

    python 2023年5月14日
    00
  • PYTHON压平嵌套列表的简单实现

    在Python中,压平嵌套列表是一种常见的操作,它可以将嵌套列表中的所有元素提取出来,形成一个一维列表。本文将详细讲解如何实现Python压平嵌套列表,并提供两个示例。 方法一:使用递归 使用递归是一种常见的方法,可以将嵌套列表中的所有元素逐层提取出来。可以使用以下代码来实现: def flatten(lst): """ 压平嵌…

    python 2023年5月14日
    00
  • numpy下的flatten()函数用法详解

    以下是关于“numpy下的flatten()函数用法详解”的完整攻略。 背景 在NumPy中,可以使用flatten()函数将多维数组转换为一维数组。本攻略将介绍如何使用flatten()函数,并提供两个示例来演示它的用法。 flatten()函数 flatten()用于将多维数组转换为一维数组。可以使用以下语法: import numpy as np # …

    python 2023年5月14日
    00
  • pytorch .detach() .detach_() 和 .data用于切断反向传播的实现

    在PyTorch中,可以使用detach()、detach_()和.data方法来切断反向传播。本攻略将详细介绍这三种方法的用法,并提供两个示例说明。以下是整个攻略的步骤: detach()、detach_()和.data方法 detach()方法 detach()方法用于返回一个新的Tensor,该Tensor与原始Tensor共享相同的数据,但不再与计算…

    python 2023年5月14日
    00
  • python实现mask矩阵示例(根据列表所给元素)

    以下是关于“Python实现mask矩阵示例(根据列表所给元素)”的完整攻略。 背景 在Python中,我们可以使用mask矩阵来过滤数组中的元素。mask矩阵是一个布尔类型的数组,它与原始数组具有相同的形状。mask矩阵中的每个元素都对应原始数组中的一个元素,如果mask矩阵中的元素为True,则表示原始数组中对应的元素应该被保留,否则应该被过滤掉。 本攻…

    python 2023年5月14日
    00
  • Python中LSTM回归神经网络时间序列预测详情

    以下是Python中LSTM回归神经网络时间序列预测的完整攻略,包括两个示例。 LSTM回归神经网络时间序列预测的基本步骤 LSTM回归神经网络时间序预测的基本步骤如下: 导入必要的库 import numpy as import pandas as pd import matplotlib.pyplot as plt import torch import…

    python 2023年5月14日
    00
  • NumPy数组的高级索引

    NumPy中的高级索引指的是使用整数数组或布尔数组来索引数组的方式,相较于基本索引(使用切片或整数索引),高级索引提供了更加灵活的方式来获取数组中的元素。下面我们来详细介绍一下NumPy中的高级索引。 整数数组索引 整数数组索引是指使用整数数组来作为索引的方式。例如,有一个二维数组a: import numpy as np a = np.array([[0,…

    2023年3月3日
    00
  • pandas将numpy数组写入到csv的实例

    在数据分析和处理中,pandas和NumPy是两个非常重要的Python库。pandas库提供了一些用于数据处理和分析的高级数据结构和函数,而NumPy库提供了用于数值计算和科学算的函数和数据结构。本文将详细讲解“pandas将numpy数组写入到csv的实例”的完整攻略,包括步骤和示例。 步骤 pandas将NumPy数组写入CSV文件的步骤如下: 导入N…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部