Python中操作MySQL和SQL Server数据库的基础与实战【第97篇—MySQL数据库】

Python中操作MySQL和SQL Server数据库的基础与实战

在Python中,我们经常需要与各种数据库进行交互,其中MySQL和SQL Server是两个常见的选择。本文将介绍如何使用pymysqlpymssql库进行基本的数据库操作,并通过实际代码示例来展示这些操作。

image-20240224232952230

1. 安装依赖库

在开始之前,首先需要安装pymysqlpymssql库。你可以使用以下命令进行安装:

pip install pymysql
pip install pymssql

2. 连接MySQL数据库

import pymysql# 建立数据库连接
connection = pymysql.connect(host='your_mysql_host',user='your_username',password='your_password',database='your_database',port=3306
)# 创建游标对象
cursor = connection.cursor()# 执行SQL查询
cursor.execute("SELECT * FROM your_table")# 获取查询结果
result = cursor.fetchall()# 打印结果
for row in result:print(row)# 关闭游标和连接
cursor.close()
connection.close()

3. 连接SQL Server数据库

import pymssql# 建立数据库连接
connection = pymssql.connect(host='your_sql_server_host',user='your_username',password='your_password',database='your_database'
)# 创建游标对象
cursor = connection.cursor()# 执行SQL查询
cursor.execute("SELECT * FROM your_table")# 获取查询结果
result = cursor.fetchall()# 打印结果
for row in result:print(row)# 关闭游标和连接
cursor.close()
connection.close()

4. 实战:插入数据

下面是一个简单的示例,演示如何插入数据到MySQL数据库:

import pymysql# 建立数据库连接
connection = pymysql.connect(host='your_mysql_host',user='your_username',password='your_password',database='your_database',port=3306
)# 创建游标对象
cursor = connection.cursor()# 插入数据
insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
data_to_insert = ('value1', 'value2')
cursor.execute(insert_query, data_to_insert)# 提交事务
connection.commit()# 关闭游标和连接
cursor.close()
connection.close()

5. 实战:更新数据

以下是一个演示如何使用pymssql更新SQL Server数据库中的数据的示例:

import pymssql# 建立数据库连接
connection = pymssql.connect(host='your_sql_server_host',user='your_username',password='your_password',database='your_database'
)# 创建游标对象
cursor = connection.cursor()# 更新数据
update_query = "UPDATE your_table SET column1 = %s WHERE column2 = %s"
data_to_update = ('new_value', 'condition_value')
cursor.execute(update_query, data_to_update)# 提交事务
connection.commit()# 关闭游标和连接
cursor.close()
connection.close()

通过这些简单的代码示例,你可以开始在Python中使用pymysqlpymssql库执行基本的数据库操作。根据实际需求,你可以进一步学习高级用法和优化技巧。

6. 实战:查询数据并处理结果

使用pymysqlpymssql进行查询并处理结果也是常见的操作,以下是一个示例:

import pymysql# 建立数据库连接
connection = pymysql.connect(host='your_mysql_host',user='your_username',password='your_password',database='your_database',port=3306
)# 创建游标对象
cursor = connection.cursor()# 查询数据
select_query = "SELECT * FROM your_table WHERE column1 = %s"
condition_value = 'desired_value'
cursor.execute(select_query, (condition_value,))# 获取查询结果
result = cursor.fetchall()# 处理结果
for row in result:print(row)# 关闭游标和连接
cursor.close()
connection.close()

7. 实战:异常处理

在实际应用中,异常处理是至关重要的。以下是一个简单的异常处理的示例:

import pymysqltry:# 建立数据库连接connection = pymysql.connect(host='your_mysql_host',user='your_username',password='your_password',database='your_database',port=3306)# 创建游标对象cursor = connection.cursor()# 执行SQL查询cursor.execute("SELECT * FROM your_table")# 获取查询结果result = cursor.fetchall()# 打印结果for row in result:print(row)except pymysql.Error as e:print(f"Error: {e}")finally:# 关闭游标和连接cursor.close()connection.close()

9. 实战:使用参数化查询

参数化查询是防止SQL注入攻击的一种重要方法。以下是一个使用参数化查询的实例:

import pymysql# 建立数据库连接
connection = pymysql.connect(host='your_mysql_host',user='your_username',password='your_password',database='your_database',port=3306
)# 创建游标对象
cursor = connection.cursor()# 参数化查询
parametrized_query = "SELECT * FROM your_table WHERE column1 = %s AND column2 = %s"
query_params = ('value1', 'value2')
cursor.execute(parametrized_query, query_params)# 获取查询结果
result = cursor.fetchall()# 处理结果
for row in result:print(row)# 关闭游标和连接
cursor.close()
connection.close()

10. 实战:使用上下文管理器

使用上下文管理器可以确保在操作完成后及时关闭数据库连接,以下是一个使用with语句的实例:

import pymysql# 使用上下文管理器确保在操作完成后关闭数据库连接
with pymysql.connect(host='your_mysql_host',user='your_username',password='your_password',database='your_database',port=3306
) as connection:# 创建游标对象with connection.cursor() as cursor:# 执行SQL查询cursor.execute("SELECT * FROM your_table")# 获取查询结果result = cursor.fetchall()# 处理结果for row in result:print(row)

11. 实战:批量插入数据

如果需要插入大量数据,最好使用批量插入以提高性能。以下是一个简单的批量插入示例:

import pymysql# 建立数据库连接
connection = pymysql.connect(host='your_mysql_host',user='your_username',password='your_password',database='your_database',port=3306
)# 创建游标对象
cursor = connection.cursor()# 批量插入数据
insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
data_to_insert = [('value1', 'value2'), ('value3', 'value4'), ('value5', 'value6')]
cursor.executemany(insert_query, data_to_insert)# 提交事务
connection.commit()# 关闭游标和连接
cursor.close()
connection.close()

通过这些实战示例,你可以更深入地了解如何在Python中使用pymysqlpymssql库进行数据库操作,包括使用参数化查询、上下文管理器以及批量插入等高级用法。这些技术将帮助你更有效地处理数据库交互,并确保代码的性能和安全性。

12. 实战:使用ORM框架

除了直接使用数据库连接库,你还可以考虑使用ORM(对象关系映射)框架来简化数据库操作。这里以SQLAlchemy为例进行示范:

首先,确保已经安装SQLAlchemy:

pip install sqlalchemy

然后,以下是一个使用SQLAlchemy进行简单查询的实例:

from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker# 定义数据模型
Base = declarative_base()class YourTable(Base):__tablename__ = 'your_table'id = Column(Integer, primary_key=True)column1 = Column(String)column2 = Column(String)# 创建数据库连接引擎
engine = create_engine('mysql+pymysql://your_username:your_password@your_mysql_host:3306/your_database')# 创建数据表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 查询数据
result = session.query(YourTable).filter_by(column1='desired_value').all()# 处理结果
for row in result:print(row.column1, row.column2)

14. 实战:处理事务

事务是数据库操作中的重要概念,用于确保一组相关操作要么全部成功,要么全部失败。以下是一个简单的事务处理实例:

import pymysql# 建立数据库连接
connection = pymysql.connect(host='your_mysql_host',user='your_username',password='your_password',database='your_database',port=3306
)# 创建游标对象
cursor = connection.cursor()try:# 开始事务connection.begin()# 执行多个SQL语句cursor.execute("UPDATE your_table SET column1 = %s WHERE column2 = %s", ('new_value', 'condition_value'))cursor.execute("INSERT INTO your_table (column1, column2) VALUES (%s, %s)", ('value1', 'value2'))# 提交事务connection.commit()except pymysql.Error as e:# 出现错误时回滚事务connection.rollback()print(f"Error: {e}")finally:# 关闭游标和连接cursor.close()connection.close()

在这个示例中,如果执行的所有SQL语句成功,commit()将提交事务,否则rollback()将回滚事务。这有助于保持数据的一致性。

15. 实战:使用连接池

在高并发环境中,使用数据库连接池能够有效地管理和复用数据库连接,提高性能和效率。以下是一个使用pymysql连接池的实例:

首先,确保已经安装DBUtils库:

pip install DBUtils

然后,使用连接池的代码示例:

from DBUtils.PooledDB import PooledDB
import pymysql# 配置连接池
pool = PooledDB(creator=pymysql,  # 使用pymysql库创建连接maxconnections=5,  # 连接池允许的最大连接数mincached=2,  # 初始化时连接池中至少创建的空闲的连接,0表示不创建maxcached=5,  # 连接池中最多闲置的连接,0和None表示不限制maxshared=3,  # 连接池中最多共享的连接数量,0和None表示全部共享blocking=True,  # 当连接池达到最大数量时,是否阻塞等待连接释放maxusage=None,  # 单个连接最多被重复使用的次数,None表示无限制
)# 从连接池获取连接
connection = pool.connection()# 使用连接进行操作
cursor = connection.cursor()
cursor.execute("SELECT * FROM your_table")
result = cursor.fetchall()
for row in result:print(row)# 关闭游标和连接
cursor.close()
connection.close()

连接池的使用可以显著提高数据库连接的效率,尤其在并发访问高的情况下。

总结

在本篇文章中,我们深入探讨了在Python中使用pymysqlpymssql库进行MySQL和SQL Server数据库操作的基础与实战。通过一系列的代码示例,我们覆盖了以下关键方面:

  1. 基础操作: 介绍了连接数据库、查询数据、插入、更新、异常处理等基本操作,通过简单的代码展示了如何使用pymysqlpymssql库完成这些任务。

  2. 高级用法: 涵盖了参数化查询、上下文管理器、批量插入等高级用法,以及使用ORM框架SQLAlchemy进行数据库操作的实例。这些技术有助于提高代码的安全性、可读性和可维护性。

  3. 事务处理: 介绍了如何使用事务处理来确保一系列数据库操作的原子性,以维护数据的一致性。

  4. 连接池: 讲解了连接池的概念以及如何使用DBUtils库中的PooledDB创建连接池,以提高数据库连接的效率和性能。

  5. 实际应用: 提供了多个实际场景下的代码示例,包括查询、更新、事务处理和连接池的应用,帮助读者更好地理解和应用所学知识。

通过学习本文所涵盖的内容,读者可以建立起对Python中操作MySQL和SQL Server数据库的全面理解,并掌握一系列实用的技术,从而更加自信地应对各种数据库交互场景。在实际项目中,选择适合自身需求的技术和工具,并根据最佳实践进行优化,将有助于提高应用程序的性能、可靠性和安全性。希望本文能成为读者学习和应用数据库操作的有力指南。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio:Entity设置表之间的关联关系

1、选择表并右键-》新增-》关联 2、设置关联的表及关联关系并“确定”即可

真的是性能优化(压测)-纯思想

文章目录 概要优化指标-MD都是文字看看就行性能优化操作1、代码优化:2、系统配置与环境优化:3、架构与设计:4、~~实施与监控:~~5、~~开发流程和环境管理:~~ 总结 概要 性能优化是一个持续的过程,需要监控、…

神经网络系列---感知机(Neuron)

文章目录 感知机(Neuron)感知机(Neuron)的决策函数可以表示为:感知机(Neuron)的学习算法主要包括以下步骤:感知机可以实现逻辑运算中的AND、OR、NOT和异或(XOR)运算。 感知机(Neuron) 感知机(Neuron)是一种简单而有效的二分类算法,用于将输入…

android input命令支持多指触摸成果展示-千里马framework实战开发

hi input命令扩展提示部分 generic_x86_64:/ # input -h Error: Unknown command: -h Usage: input [<source>] <command> [<arg>...]The source…

数智化转型的三大关键点

一、重新认识数智化转型 消费红利时代&#xff0c;伴随中国宏观经济向好发展&#xff0c;相当一部分企业可以轻松实现快速增长&#xff0c;如同搭乘了一架高速运转的电梯一路飞升。然而&#xff0c;随着宏观经济增速放缓&#xff0c;时代的电梯逐渐失去效力&#xff0c;中国商…

python3 Flask jwt 简易token认证实例

直接上代码 from flask import Flask, jsonify, request, make_response import jwt import datetime from functools import wrapsapp Flask(__name__)# 这是一个示例密钥&#xff0c;实际应用中应该使用一个复杂且随机的密钥 app.config[SECRET_KEY] your_secret_keydef t…

第九节HarmonyOS 常用基础组件24-Navigation

1、描述 Navigation组件一般作为Page页面的根容器&#xff0c;通过属性设置来展示的标题栏、工具栏、导航栏等。 2、子组件 可以包含子组件&#xff0c;推荐与NavRouter组件搭配使用。 3、接口 Navigation() 4、属性 名称 参数类型 描述 title string|NavigationComm…

源代码管理——码云Gitee

目录 Git安装 Gitee配置SSH 源代码管理常规操作 1.idea配置git 2.常规操作 Git安装 安装Git是进行源代码管理的基本步骤之一。以下是在本地安装Git的通用步骤&#xff0c;适用于Windows系统&#xff1a; 下载Git安装程序: 访问Git官网的下载页面&#xff1a;Git官网下载地…

【前端素材】推荐优质后台管理系统Welly平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

现在学Oracle是49年入国军么?

今天周末&#xff0c;不聊技术&#xff0c;聊聊大家说的最多的一个话题 先说明一下&#xff0c;防止挨喷&#x1f606; 本人并不是职业dba&#xff0c;对数据库就是爱好&#xff0c;偶尔兼职&#xff0c;以下仅个人观点分析&#xff0c;如有不同观点请轻喷&#xff0c;哈哈&…

【数据结构和算法初阶(c语言)】数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)

1.何为数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。本质来讲就是在内存中去管理数据方式比如我们的增删查改。在内存中管理数据的方式有很多种&#xff08;比如数组结构、链式结构、树型结…

【Java程序员面试专栏 数据结构】六 高频面试算法题:字符串

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊数组,包括数组合并,滑动窗口解决最长无重复子数组问题,图形法解下一个排列问题,以及一些常见的二维矩阵问题,所以放到一篇Blog中集中练习 题目…

openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议

文章目录 openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议 openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议 目前LLVM在数据库内核侧已默认打开&#xff0c;用户可结合上述的分析进行配置&#xff0c;总体建议如下&#xff1a; 设置合理的wor…

Nginx基本操作

目录 引言 一、Nginx配置文件详解 &#xff08;一&#xff09;配置文件 &#xff08;二&#xff09;模块 二、全局配置文件 &#xff08;一&#xff09;关闭版本或修改版本 1.关闭版本号 2.修改版本信息 &#xff08;二&#xff09;修改启动的进程数 &#xff08;三&…

JavaScript+PHP实现视频文件分片上传

摘要 视频文件分片上传&#xff0c;整体思路是利用JavaScript将文件切片&#xff0c;然后循环调用上传接口 upload.php 将切片上传到服务器。这样将由原来的一个大文件上传变为多个小文件同时上传&#xff0c;节省了上传时间&#xff0c;这就是文件分片上传的其中一个好处。 上…

【黑马程序员】2、TypeScript介绍_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址&#xff1a;【黑马程序员前端TypeScript教程&#xff0c;TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2、TypeScript初体验 2.1 安装编译TS的工…

hbuilderx创建、运行uni-app

创建uni-app 在点击工具栏里的文件 -> 新建 -> 项目&#xff1a; 选择uni-app类型&#xff0c;输入工程名&#xff0c;选择模板&#xff0c;点击创建&#xff0c;即可成功创建。 uni-app自带的模板有 Hello uni-app &#xff0c;是官方的组件和API示例。还有一个重要模…

解决easyExcel模板填充时转义字符\{xxx\}失效

正常我们在使用easyExcel进行模板填充时&#xff0c;定义的变量会填充好对应的实际数据&#xff0c;未定义的变量会被清空&#xff0c;但是如果这个未定义的变量其实是模板的一部分&#xff0c;那么清空了就出错了。 在这张图里&#xff0c;上面的是模板填充后导出的文件&…

Guitar Pro8.2吉他软件2024中文版功能特点介绍

Guitar Pro 8.2是一款功能强大的吉他乐谱软件&#xff0c;专为吉他手、音乐制作人和音乐爱好者设计。它提供了丰富的功能&#xff0c;帮助用户轻松创建、编辑、打印和分享吉他乐谱。以下是Guitar Pro 8.2的主要功能特点&#xff1a; Guitar Pro 2024 win-安装包下载如下&#x…

华为HCIP Datacom H12-831 卷24

多选题 1、如图所示&#xff0c;某园区部署OSPF实现网络互通&#xff0c;其中Area1部署为NSSA区域。某工程师为了实现R1访问R4的环回口地址&#xff0c;在R4的OSPF进程中引入直连路由。以下关于该场景的描述,错误的有哪些项? A、在R4引入直连路由后&#xff0c;R1通过转换后的…