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

news2024/11/20 15:37:17

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 pymysql

try:
    # 建立数据库连接
    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.coloradmin.cn/o/1469224.html

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

相关文章

音频smmu问题之smmu学习

一、音频smmu 内存访问问题 在工作中,遇到一个smmu问题,主要log信息如下: arm-smmu 15000000.apps-smmu: Unhandled arm-smmu context fault from soc:spf_core_platform:qcom,msm-audio-ion! arm-smmu 15000000.apps-smmu: FAR 0x0000000…

【大数据】Flink 内存管理(四):TaskManager 内存分配(实战篇)

《Flink 内存管理》系列(已完结),共包含以下 4 篇文章: Flink 内存管理(一):设置 Flink 进程内存Flink 内存管理(二):JobManager 内存分配(含实际…

小米标准模组+MCU 快速上手开发(一)——之固件下载

小米标准模组+MCU 开发笔记之固件下载 背景技术名词简介● 小米IoT开发者平台● 小米IoT 模组● ESP系列简介问题描述 + 解决方式问题1:固件下载是否有示例,如何下载到硬件板卡中?问题2:固件下载的官方程序是什么?在哪里?该如何使用?问题3:固件下载时,Flash和Ram 有什…

【C++那些事儿】C++入门 | 命名空间 | 缺省参数 | 引用 | 内联函数 | auto关键字 | 范围for循环 | nullptr

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C那些事儿 🌅 有航道的人,再渺小也不会迷途。 文章目录 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺…

【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现

创建时间:2024-02-23 最后编辑时间:2024-02-24 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加…

C++基础知识(六:继承)

首先我们应该知道C的三大特性就是封装、继承和多态。 此篇文章将详细的讲解继承的作用和使用方法。 继承 一个类,继承另一个已有的类,创建的过程 父类(基类)派生出子类(派生类)的过程 继承提高了代码的复用性 【1】继承的格式 class 类名:父类名 {}; 【…

基于ILI9341的TFT-LCD屏幕显示要点总结

目录 LCD常用引脚及其功能 LCD驱动流程 RGB565 关键指令 GRAM自增方向 设置开始坐标和结束坐标 写GRAM指令 读GRAM指令 本文主要参考视频如下: 第37讲 LCD-TFTLCD原理与配置介绍-M4_哔哩哔哩_bilibili 说明: 目前,市面上常见的TFT-LC…

#FPGA(IRDA)

1.IDE:Quartus II 2.设备:Cyclone II EP2C8Q208C8N 3.实验:IRDA(仿真接收一个来自0x57地址的数据0x22 (十进制34)) 4.时序图: 5.步骤 6.代码: irda_receive.v module irda_receive ( input wire…

记一次生产jvm oom问题

前言 jvm添加以下参数,发生OOM时自动导出内存溢出文件 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/opt 内存分析工具: MAT, 下载地址:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation, 注意工具地址…

Uncertainty-Aware Mean Teacher(UA-MT)

Uncertainty-Aware Mean Teacher 0 FQA:1 UA-MT1.1 Introduction:1.2 semi-supervised segmentation1.3 Uncertainty-Aware Mean Teacher Framework 参考: 0 FQA: Q1: 不确定感知是什么意思?不确定信息是啥?Q2:这篇文章的精妙的点…

AI绘画工具有哪些?

AI绘画工具是利用人工智能技术来辅助或生成艺术作品的工具。这些工具可以分为两类:一类是生成艺术作品的工具,另一类是辅助艺术创作的工具。本文将介绍一些主流的AI绘画工具,并分析它们的特点和适用场景。 1. DALL-E DALL-E 是由 OpenAI 开发…

并发编程(5)共享模型之不可变

7 共享模型之不可变 本章内容 不可变类的使用不可变类设计无状态类设计 7.1 日期转换的问题 问题提出 下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的, 有很大几率出现 java.lang.NumberFormatException 或者出现不正确的日期解析结果,…

Java+SpringBoot,打造极致申报体验

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

web安全学习笔记【16】——信息打点(6)

信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等[1] #知识点: 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-C…

东方博宜 1519. 求1~n中每个数的因子有哪些?

东方博宜 1519. 求1~n中每个数的因子有哪些&#xff1f; #include<iostream> using namespace std; int main() {int n ;cin >> n ;for(int i 1 ; i < n ; i){int a[1000] ;int k 0 ;for(int j 1 ; j < i ; j){if(i%j0){a[k] j ;k ;} }cout << i …

Golang Redis:构建高效和可扩展的应用程序

利用Redis的闪电般的数据存储和Golang的无缝集成解锁协同效应 在当前的应用程序开发中&#xff0c;高效的数据存储和检索的必要性已经变得至关重要。Redis&#xff0c;作为一个闪电般快速的开源内存数据结构存储方案&#xff0c;为各种应用场景提供了可靠的解决方案。在这份完…

从docx提取文本的Python实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

限流算法

下面对常见的限流算法进行讨论。目前&#xff0c;常用的限流算法主要有三种&#xff1a;计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。 1. 计数器法 计数器法是通过计数对到来的请求进行选择性处理。如系统限制一秒内最多有X个请求&#xff0c;则在该…

opengles 顶点坐标变换常用的矩阵(九)

文章目录 前言一、opengles 常用的模型矩阵1. 单位矩阵2. 缩放矩阵3. 位移矩阵4. 旋转矩阵二、第三方矩阵数学库1. glm1.1 ubuntu 上安装 glm 库1.2 glm 使用实例1.2.1 生成一个沿Y轴旋转45度的4x4旋转矩阵, 代码实例如下1.2.2 生成一个将物体移到到Z轴正方向坐标为5处的4x4 vi…

黑马JavaWeb开发跟学(一)Web前端开发HTML、CSS基础

黑马JavaWeb开发一.Web前端开发HTML、CSS基础 引子、Web开发介绍传统路线本课程全新路线本课程适用人群课程收获一、什么是web开发二、网站的工作流程三、网站的开发模式四、网站的开发技术 前端开发基础一、前端开发二、HTML & CSS2.1 HTML快速入门2.1.1 操作第一步第二步…