65.9K
CodeProject 正在变化。 阅读更多。
Home

Python 中带 SQL 数据库的 CRUD 操作

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (8投票s)

2019 年 1 月 22 日

CPOL

8分钟阅读

viewsIcon

61326

本次实践演示将帮助您了解如何在 Python 中使用 SQL 数据库实现 CRUD(创建、读取、更新和删除)操作功能。

引言

本次实践演示将帮助您了解如何在 Python 中使用 SQL 数据库实现 CRUD(创建、读取、更新和删除)操作功能。对于任何与数据库相关的应用程序,我们都会执行一些操作来插入记录 [C=创建]、读取记录 [R=读取]、使用新值更新现有记录 [U=更新] 或从数据库删除记录 [D=删除]。因此,在任何需要使用数据库的应用程序中,这四种操作都是必不可少的。

第一天:在现有 Visual Studio 中设置和测试 Python 环境

第二天:在 Visual Studio 2017 中开始第一个 Python 项目

背景

今天,我们将尝试通过一个简单的 Python 应用程序来实现此 CRUD 操作功能。我们将为此演示使用 SQL Server,并了解如何与 SQL Server 进行连接。我们将按照分步的实践演示,并详细介绍每个步骤。步骤如下:

  1. 在 Visual Studio 中创建 Python 项目
  2. 在 SQL 中创建数据库和表
  3. 为数据库创建配置文件
  4. 安装 Python 包“Pypyodbc”
  5. 创建连接文件
  6. 创建新记录
  7. 读取数据
  8. 更新现有记录
  9. 删除数据

我已经上面定义了本文的目标。那么,废话不多说,让我们开始实际实现吧。

在 Visual Studio 中创建 Python 项目

打开 Visual Studio 2017,然后转到“文件 > 新建 > 项目”。这将打开“新建项目”窗口,现在只需在左侧面板的“已安装”部分选择“Python”,然后在中间部分单击“Python 应用程序”,并提供合适的名称“PythonCRUD”。您还可以根据需要更改此应用程序的位置,然后单击“确定”。

Python Crud operations

这需要一些时间,您的项目就会准备就绪。您还可以阅读本文,获取有关如何在 Visual Studio 中创建第一个 Python 应用程序的分步信息。

在 SQL 中创建数据库和表

我们已经准备好了 Python 项目,并准备好实现CRUD操作,但在那之前,让我们在 SQL Server 中创建数据库和表。这样我们就可以对实时数据库执行 CRUD 操作。在这里,我们将创建一个名为“Test”的简单数据库,并创建一个名为“Employee”的简单表,如下所示。以下是创建数据库和表的 SQL 脚本。您可以直接执行它。一旦成功执行,您就可以在 SQL Server 中找到一个 Test 数据库以及 Employee 表。

CREATE DATABASE Test
GO

USE Test
GO

CREATE TABLE Employee(Id int PRIMARY KEY IDENTITY(1,1),	Name varchar(255) NULL,	Age int NULL)

为数据库创建配置文件

现在,让我们在此项目中添加一个配置文件,在该文件中我们将定义所有属性及其值。这些属性将在创建与 SQL 数据库的连接时使用。所以,打开解决方案资源管理器,右键单击“项目”,然后选择“添加 > 新项”。这将打开一个“添加新项”窗口,如下所示。在此窗口中,我们需要选择“空 Python 文件”,并提供一个有价值的名称,如“config.py”,然后单击“添加”。单击“添加”后,它将在项目中添加一个名为 config.py 的新 Python 文件。

Configuration in python

现在,让我们修改“config.py”并添加 SQL 数据库连接所需的属性及其值,如下所示。在这里,我们需要驱动程序名称、服务器名称、数据库名称以及用户名和密码凭据。这些属性包含在一个对象中,以便我们稍后使用。

# SQL Server Database Connection Properties
DATABASE_CONFIG ={
    'Driver': 'SQL Server',
    'Server': 'DESKTOP-QQ95JAD',
    'Database': 'Test',
    'UID': 'sa',
    'Password': 'xxxxxxx'
    }

安装 Python 包“Pypyodbc”

接下来,我们将安装一个 Python 包,该包用于建立数据库连接并在数据库上执行命令。它就是 Pypyodbc,这是一个纯 Python 的数据库操作包。

根据 **PyPi.Org**:**Pypyodbc 是一个纯 Python 脚本,可在 CPython / IronPython / PyPy 上运行,版本 2.4 / 2.5 / 2.6 / 2.7 / 3.2 / 3.3,适用于 Win / Linux,32 / 64 位。更多信息...**https://pypi.ac.cn/project/pypyodbc/

要为项目环境安装新包,请右键单击 Python 环境并选择“安装 Python 包…”。

Install Python Packages

这将打开“Python 环境”窗口,您可以在其中找到所有已安装的环境,并在其下方有一个搜索框,您可以在其中搜索任何特定包并进行安装。所以,只需搜索 pypyodbc,如下图所示,然后单击“安装 pypyodbc (1.3.5)”。

Install Pypyodbc

一旦您安装了 pypyodbc,您就可以在“输出”窗口中看到成功安装的消息,并且也可以在 Python 环境中找到该包。

pypyodbc

创建连接文件

任何与数据库协同工作并执行数据库操作的应用程序都有一个用于创建和管理与数据库连接的机制。在此应用程序中,我们将做同样的事情,并创建一个数据库连接文件,该文件根据配置文件中定义的配置生成与数据库的连接。让我们创建一个名为“db_connection.py”的新 Python 文件并在其中创建一个方法。此方法(getConnection())将返回基于 config.py 中定义的数据库配置的数据库连接。

首先,让我们导入 pypyodbc,以便我们可以使用它。要访问 config.py 中定义的配置属性,我们首先需要使用“import filename”导入该文件,然后就可以直接访问该对象。

import pypyodbc
import config

# Return the sql connection 
def getConnection():
     connection = pypyodbc.connect("Driver= {"+config.DATABASE_CONFIG["Driver"]+"} ;
     Server=" + config.DATABASE_CONFIG["Server"] + ";
     Database=" + config.DATABASE_CONFIG["Database"] + ";
     uid=" + config.DATABASE_CONFIG["UID"] + ";pwd=" + config.DATABASE_CONFIG["Password"])
     return connection 

现在,让我们装饰从那里开始执行的 main 函数。正如您在下面的代码中所见,这是我们在 Visual Studio 中创建项目时自动创建的 PythonCRUD.py 文件,其项目名称相似。在这里,首先,我们导入所有必需的模块,如 pypyodbc 用于与 SQL Server 进行数据库连接和操作,db_connection 用于根据上面提供的配置获取连接。还有其他四个文件,如 read、create、update 和 delete,分别用于执行 CRUD 操作。

第一个屏幕将允许用户输入他/她对可用选项(C=创建、R=读取、U=更新和 D=删除)的选择。

import pypyodbc
import db_connection as dbConn
from read import Read
from create import Create
from update import Update
from delete import Delete

def main():
    print('Available Options: C=Create, R=Read, U=Update, D=Delete ')
    choice = input('Choose your option = ')

    if choice == 'C':
        createObj=Create()
        createObj.func_CreateData()
    elif choice == 'R':
        readObj =  Read()
        readObj.func_ReadData()
    elif choice == 'U':
        updateObj = Update()
        updateObj.func_UpdateData()
    elif choice == 'D':
        deleteObj = Delete()
        deleteObj.func_DeleteData()
    else:
        print('Wrong choice, You are going exist.')

# Call the main function
main()

创建新记录

我们已经做了很多工作,比如项目创建、数据库和表创建、创建数据库配置文件、创建连接文件等。现在,让我们开始从 Python 文件创建新记录并将其保存到数据库。

所以,首先创建一个名为“create.py”的新空 Python 文件,就像我们在上一步中创建的那样。在此文件中,创建一个名为“Create”的类和一个名为“func_CreateData(self)”的方法,此方法将负责向数据库添加新记录。在这里,我们正在执行以下操作。

  1. 首先,从 db_connection 文件获取数据库连接。
  2. 进行两次输入,分别输入姓名和年龄的值。
  3. 使用输入值(姓名、年龄)创建 insert 查询并执行它。
  4. 提交连接,以便将值提交到数据库表中。
  5. finally 块中,关闭连接。
  6. try-except-finally 块中维护执行。
  7. 打印有价值的消息。
import db_connection as dbConn

class Create:
    def func_CreateData(self):

        # Get the sql connection
        connection = dbConn.getConnection()
                
        name = input('Enter Name = ')
        age = input('Enter Age = ')

        try:
           query = "Insert Into Employee(Name, Age) Values(?,?)" 
           cursor = connection.cursor()

           # Execute the sql query
           cursor.execute(query, [name, age])

           # Commit the data
           connection.commit()
           print('Data Saved Successfully')

        except:
             print('Something wrong, please check')

        finally:
           # Close the connection
           connection.close()

让我们运行项目,您将看到一个类似于以下的窗口。在这里,您将获得您的选择选项[代码将在本文底部提供]。所以,首先选择您的选项 C。这意味着您将创建一个新记录。

它会要求分别输入姓名和年龄,数据将保存,并显示“数据保存成功”的相应消息。

Create data in Python

读取数据

让我们创建另一个名为“read.py”的文件来读取数据并打印它。在这里,我们将执行与创建时相同的操作。

  1. 首先,从 db_connection 文件获取数据库连接。
  2. 创建 select 查询并执行它。
  3. 将值存储在某个变量中,这里我们将其存储在游标中。
  4. 循环遍历游标并打印值。
import db_connection as dbConn

class Read:
    def func_ReadData(self):   
        # Get the sql connection
        connection = dbConn.getConnection()
        cursor = connection.cursor()

        # Execute the sql query
        cursor.execute('Select * from Employee')

        # Print the data
        for row in cursor:
            print('row = %r' % (row,))

在运行项目时,只需选择 R 作为读取数据的选项,然后按 Enter 键。您将看到以下输出:

Read in Python

更新现有记录

现在,是时候更新现有记录了。为此,首先让我们创建一个名为 update.py 的文件,并按如下方式编写代码。在这里,我们必须首先获取需要更新的记录,然后我们将为该记录提供新值并进行更新。

import db_connection as dbConn;

class Update:
    def func_UpdateData(self):
        # Get the SQL connection
        connection = dbConn.getConnection()

        id = input('Enter Employee Id = ')
    
        try:
           # Fetch the data which needs to be updated
           sql = "Select * From Employee Where Id = ?" 
           cursor = connection.cursor()
           cursor.execute(sql, [id])
           item = cursor.fetchone()
           print('Data Fetched for Id = ', id)
           print('ID\t\t Name\t\t\t Age')
           print('-------------------------------------------')       
           print(' {}\t\t {} \t\t\t{} '.format(item[0], item[1], item[2]))
           print('-------------------------------------------')
           print('Enter New Data To Update Employee Record ')

           name = input('Enter New Name = ')
           age = input('Enter New Age = ')
           query = "Update Employee Set Name = ?, Age =? Where Id =?" 
       
           # Execute the update query
           cursor.execute(query, [name, age, id])
           connection.commit()
           print('Data Updated Successfully')

        except:
             print('Something wrong, please check')

        finally:
           # Close the connection
           connection.close()

这次在运行项目时,只需选择 U 作为更新记录的选项。首先,它会要求输入将要更新的员工 ID,并显示该员工的数据。在此之后,它会要求输入该员工的姓名和年龄的更新数据并进行更新。一旦成功更新,它将显示确认消息。

Update in python

删除数据

在这里,我们将尝试删除现有记录。所以,让我们为删除操作创建一个名为“delete.py”的新文件。在这里,我们首先会要求用户输入需要删除的员工 ID,并根据该 ID 显示该员工的数据。

下一个消息将要求您确认是否要删除。我们有两个选项:“Y”和“N”。如果您想删除记录,只需按 Y

import db_connection as dbConn;

class Delete:
    def func_DeleteData(self):
        # Get the SQL connection
        connection = dbConn.getConnection()

        id = input('Enter Employee Id = ')
    
        try:
           # Get record which needs to be deleted
           sql = "Select * From Employee Where Id = ?" 
           cursor = connection.cursor()
           cursor.execute(sql, [id])
           item = cursor.fetchone()
           print('Data Fetched for Id = ', id)
           print('ID\t\t Name\t\t\t Age')
           print('-------------------------------------------')       
           print(' {}\t\t {} \t\t\t{} '.format(item[0], item[1], item[2]))
           print('-------------------------------------------')
           confirm = input('Are you sure to delete this record (Y/N)?')

           # Delete after confirmation
           if confirm == 'Y':
               deleteQuery = "Delete From Employee Where Id = ?"
               cursor.execute(deleteQuery,[id])
               connection.commit()
               print('Data deleted successfully!')
           else:
                print('Wrong Entry')
        except:
            print('Something wrong, please check')
        finally:
            connection.close()

运行项目并选择最后一个选项 D 来删除记录,然后提供需要删除的员工 ID。提供员工 ID 后,它将首先显示记录数据并请求确认。如果您提供 Y 作为确认,那么它将删除记录并显示确认消息,表明数据已成功删除。

Delete in python

结论

因此,今天我们学习了如何在 Python 中使用 SQL 数据库执行 CRUD 操作。

希望这篇文章对您有所帮助。请通过评论提供您的反馈,这将帮助我为下一篇文章改进自己。如果您有任何疑问,请在下面的评论部分提问,如果您喜欢这篇文章,请与您的朋友分享。谢谢!

© . All rights reserved.