使用Python编写数据库管理系统

引言

数据库管理系统(DBMS)是用来管理和操作数据库的软件系统。它提供了一系列的功能,包括数据存储、数据查询、数据备份和恢复等。在现代的应用程序开发中,数据库管理系统是不可或缺的一部分。

本文将介绍如何使用Python编写一个简单的数据库管理系统。我们将使用Python内置的SQLite库作为示例数据库,并使用面向对象的编程方法来实现各种数据库操作。

设计

在开始编写代码之前,我们需要先进行设计。我们将使用类图来描述系统的设计。以下是我们设计的类图:

classDiagram
  class DatabaseManager {
    -connection
    -cursor
    +__init__(self, db_name: str)
    +create_table(self, table_name: str, columns: List[str])
    +insert(self, table_name: str, values: List)
    +query(self, table_name: str, condition: str) -> List[List]
    +update(self, table_name: str, condition: str, new_values: List)
    +delete(self, table_name: str, condition: str)
    +close(self)
  }

我们设计了一个名为DatabaseManager的类,它包含了与数据库连接和操作相关的方法。该类有一个私有属性connectioncursor,分别用于与数据库建立连接和执行SQL语句。

接下来,我们将详细讨论各个方法的实现。

实现

首先,我们需要导入Python内置的SQLite库。我们可以使用以下代码:

import sqlite3

接下来,我们可以开始实现DatabaseManager类了。

from typing import List

class DatabaseManager:
    def __init__(self, db_name: str):
        self.connection = sqlite3.connect(db_name)
        self.cursor = self.connection.cursor()

    def create_table(self, table_name: str, columns: List[str]):
        columns_str = ', '.join(columns)
        query = f"CREATE TABLE IF NOT EXISTS {table_name}({columns_str})"
        self.cursor.execute(query)
        self.connection.commit()

    def insert(self, table_name: str, values: List):
        values_str = ', '.join(['?' for _ in values])
        query = f"INSERT INTO {table_name} VALUES ({values_str})"
        self.cursor.execute(query, values)
        self.connection.commit()

    def query(self, table_name: str, condition: str) -> List[List]:
        query = f"SELECT * FROM {table_name} WHERE {condition}"
        result = self.cursor.execute(query).fetchall()
        return result

    def update(self, table_name: str, condition: str, new_values: List):
        new_values_str = ', '.join([f"{column} = ?" for column in new_values])
        query = f"UPDATE {table_name} SET {new_values_str} WHERE {condition}"
        self.cursor.execute(query, new_values)
        self.connection.commit()

    def delete(self, table_name: str, condition: str):
        query = f"DELETE FROM {table_name} WHERE {condition}"
        self.cursor.execute(query)
        self.connection.commit()

    def close(self):
        self.cursor.close()
        self.connection.close()

让我们逐个解释各个方法的功能:

  • __init__(self, db_name: str)方法用于创建与数据库的连接。它接受一个数据库名称作为参数,并使用sqlite3.connect()方法创建与数据库的连接。然后,它使用connection.cursor()方法创建一个游标对象,用于执行SQL语句。
  • create_table(self, table_name: str, columns: List[str])方法用于创建表格。它接受一个表格名称和列名称的列表作为参数,并使用CREATE TABLE语句创建表格。如果表格已经存在,则不执行任何操作。
  • insert(self, table_name: str, values: List)方法用于向表格中插入数据。它接受一个表格名称和值的列表作为参数,并使用INSERT INTO语句将数据插入表格。
  • query(self, table_name: str, condition: str) -> List[List]方法用于查询表格中的数据。它接受一个表格名称和查询条件作为参数,并使用SELECT语句查询符合条件的数据。
  • update(self, table_name: str, condition: str, new_values: List)方法用于更新表格中的数据。它接受一个表格名称、更新条件和新值的列表作为参数,并使用UPDATE语句更新符合条件的数据。
  • `delete(self