当前位置: 首页 > news >正文

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

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

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

在这里插入图片描述

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数据库的全面理解,并掌握一系列实用的技术,从而更加自信地应对各种数据库交互场景。在实际项目中,选择适合自身需求的技术和工具,并根据最佳实践进行优化,将有助于提高应用程序的性能、可靠性和安全性。希望本文能成为读者学习和应用数据库操作的有力指南。

相关文章:

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

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

【兔子机器人】五连杆运动学解算与VMC(virtual model control)

VMC (virtual model control,虚拟模型控制) 是一种直觉控制方式,其关键是在每个需要控制的自由度上构造恰当的虚拟构件以产生合适的虚拟力。虚拟力不是实际执行机构的作用力或力矩,而是通过执行机构的作用经过机构转换而成。对于一些控制问题…...

学习鸿蒙基础(6)

一、Prop属性 父——>子 单向同步 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的,但是变化不会同步回其父组件。Prop装饰的变量和父组件建立单向的同步关系。Prop变量允许在本地修改,但修改后的变化不会同步回父组件。当父组…...

标准PoE交换机、非标准PoE交换机和非PoE交换机三者到底有何区别?

目录 前言: 一、标准PoE交换机 1.1 工作原理 1.2 应用场景 1、视频监控 2、无线接入点 3、IP电话 1.3 优势 1、简化布线 2、简化安装 3、提高可靠性 二、非标准PoE交换机 2.1 工作原理 2.2 应用场景 1、无线路由器 2、IP电话 3、数据中心 2.3 优势…...

【软件测试】--功能测试4-html介绍

1.1 前端三大核心 html:超文本标记语言&#xff0c;由一套标记标签组成 标签&#xff1a; 单标签&#xff1a;<标签名 /> 双标签:<标签名></标签名> 属性&#xff1a;描述某一特征 示例:<a 属性名"属性值"> 1.2 html骨架标签 <!DOC…...

模型优化_XGBOOST学习曲线及改进,泛化误差

代码 from xgboost import XGBRegressor as XGBR from sklearn.ensemble import RandomForestRegressor as RFR from sklearn.linear_model import LinearRegression as LR from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split,c…...

Java8 - LocalDateTime时间日期类使用详解

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…...

3D城市模型可视化:开启智慧都市探索之旅

随着科技的飞速发展&#xff0c;我们对城市的认知已经不再局限于平面的地图和照片。今天&#xff0c;让我们领略一种全新的城市体验——3D城市模型可视化。这项技术将带领我们走进一个立体、生动的城市世界&#xff0c;感受前所未有的智慧都市魅力。 3D城市模型通过先进的计算机…...

某查查首页瀑布流headers加密

目标网站&#xff1a; 某查查 对目标网站分析发现 红框内的参数和值都是加密的&#xff0c;是根据算法算出来的&#xff0c;故进行逆向分析。 由于没有固定参数名&#xff0c;只能通过搜索headers&#xff0c;在搜索的位置上打上断点&#xff0c;重新请求。 断点在此处断住&a…...

Microsoft Visio 文本框上标或下标

Microsoft Visio 文本框上标或下标 1. 文本框公式2. 选中需要成为上标或下标的部分&#xff0c;开始 - > 段落 -> 字体 -> 常规 -> 位置 -> 上标 / 下标​​​3. 文本框公式4. 快捷键References 1. 文本框公式 2. 选中需要成为上标或下标的部分&#xff0c;开始…...

Java项目:29 基于SpringBoot+thymeleaf实现的图书管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 基于SpringBootthymeleaf实现的图书管理系统分为管理员、读者两个登录角色&#xff0c;一共是8个功能模块 管理员权限 图书管理&#xff1a;…...

Unity游戏项目中的优化之摄像机视锥体剔除优化

在项目中一个完成的游戏场景一般都会有成千上百的物体&#xff0c;假如都去让GPU全部渲染一遍&#xff0c;那带来的消耗其实是挺大的&#xff0c;很多不在摄像机范围内的物体其实没有必要去渲染&#xff0c;尽管GPU自带剔除&#xff0c;但是如果从CPU阶段就提交给GPU指令——哪…...

超1000本计算机经典书籍分享(均可免费下载)

今天给大家推荐两个开源项目&#xff0c;均可百度网盘下载&#xff1a; 1 https://gitee.com/ForthEspada/CS-Books 超过1000本的计算机经典书籍、个人笔记资料以及作者在各平台发表文章中所涉及的资源等。 书籍资源包括C/C、Java、Python、Go语言、数据结构与算法、操作系统…...

AI大模型提供商有哪些?

AI大模型提供商&#xff1a;引领人工智能创新浪潮 随着人工智能技术的迅猛发展&#xff0c;AI大模型成为了推动行业变革和创新的核心驱动力之一。作为AI领域的重要参与者&#xff0c;AI大模型提供商扮演着关键的角色。本文将围绕这一主题&#xff0c;介绍几家在AI大模型领域具…...

【Linux】部署单机项目(自动化启动)

目录 一.jdk安装 二.tomcat安装 三.MySQL安装 四.部署项目 一.jdk安装 1.上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录&#xff0c;将安装包拖进去 2.解压安装包 防止后面单个系列解压操作&#xff0c;我这边就直接将所有的要用的全部给解压&#xff0c;如下图注…...

MySQL:使用聚合函数查询

提醒&#xff1a; 设定下面的语句是在数据库名为 db_book里执行的。 创建t_grade表 USE db_book; CREATE TABLE t_grade(id INT,stuName VARCHAR(20),course VARCHAR(40),score INT );为t_grade表里添加多条数据 INSERT INTO t_grade(id,stuName,course,score)VALUES(1,测试0…...

【Linux C | 网络编程】套接字选项、getsockopt、setsockopt详解及C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

Springboot解决模块化架构搭建打包错误找不到父工程

Springboot解决模块化架构搭建打包错误找不到父工程 一、情况一找不到父工程依赖1、解决办法 二、情况二子工程相互依赖提示"程序包xxx不存在" 一、情况一找不到父工程依赖 报错信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:…...

Android全屏黑边解决方案

在Android12以上的手机&#xff0c;设置全屏后屏幕底部有黑边或者白边&#xff0c;有的屏幕顶部有黑边。解决方案很简单&#xff0c;在使用的主题中添加对应的设置即可&#xff0c;如下&#xff1a; res/values/themes.xml <resources><style name"Base.Theme.La…...

【矩阵】【方向】【素数】3044 出现频率最高的素数

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 素数 矩阵 方向 LeetCode 3044 出现频率最高的素数 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格&#xff0c;你可以按以下方式生成数字&#xff1a; 最多有 8 条路径可以选择&#xff1a;东&am…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...