Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】

认真发呆
认真发呆
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍Python操作MySQL数据库的两种常用方式。首先通过pymysql模块建立连接,详解connect参数及游标操作,实现基础增删改查;其次利用pandas库的read_sql和to_sql函数,结合SQLAlchemy引擎,将数据直接读写为DataFrame格式,便于后续数据处理与分析。

Python操作MySQL数据库概述

本文通过具体实例,解析Python连接MySQL数据库的两种主流实现方案,供开发者参考。

使用pymysql模块连接数据库

第一种方案:使用pymysql模块

具体实现代码如下:


import pymysql
#打开数据库连接
db=pymysql.connect(host='1.1.1.1',port=3306,user='root',passwd='123123',db='test',charset='utf8')
cursor=db.cursor()#使用cursor()方法获取操作游标
sql = "select * from test0811"
cursor.execute(sql)
info = cursor.fetchall()
db.commit()
cursor.close() #关闭游标
db.close()#关闭数据库连接

执行上述代码后,数据表test0811的原始内容与程序读取结果分别如下:

pymysql是Python中用于操作MySQL数据库的第三方模块。使用前需先引入该模块。

pymysql连接参数详解


import pymysql

通过pymysql的connect()方法建立数据库连接,该方法的参数含义如下:

  • host:指定MySQL服务器地址。若数据库位于本地,可使用localhost或127.0.0.1;若位于远程服务器,则需填写对应IP地址。
  • port:指定服务端口号,默认值为3306。若未显式指定,则使用默认值。
  • user:登录数据库所使用的用户名。
  • passwd:对应user账户的登录密码。
  • db:指定需要操作的数据库名称。
  • charset:设置为utf8编码,确保存入的汉字不会出现乱码。

注意:除port=3306可不加引号外,其他参数的值均需使用引号包裹。

代码中的db变量构成了Python与MySQL通信的桥梁。db.cursor()用于获取连接游标对象,通过该游标可执行SQL语句。此外,常用方法还包括:commit()用于提交数据库修改,rollback()用于回滚(取消当前操作),close()用于关闭连接。

上述内容介绍了连接对象db的相关方法,游标对象的方法同样关键,利用游标方法即可对数据库执行具体操作。游标对象的常用方法如下表所示:

游标对象常用方法

名称 描述
close() 关闭游标,之后游标不可用
execute(query[,args]) 执行一条SQL语句,可以带参数
executemany(query,pseq) 对序列pseq中的每个参数执行SQL语句
fetchone() 返回一条查询结果
fetchall() 返回所有查询结果
fetchmany([size]) 返回size条查询结果
nextset() 移动到下一条结果
scroll(value,mode='relative') 移动游标到指定行,如果mode='relative',则表示从当前行移动value条,如果mode=‘absolute',则表示从结果集的第一行移动value条

至此,pymysql的基本用法已阐述清晰。剩余的数据库操作(增删改查)主要依赖SQL语句。尽管SQL功能强大,但在某些场景下可能略显局限,结合Python的灵活性与SQL的强大能力可实现更多功能,而pymysql在此过程中主要充当工具与桥梁角色。从代码运行结果(第二幅图)可见,读取的数据存储在二维元组中,例如((1, '小红', '80'),(2, '小明', '90'),(3, '小美', '87'),(4, 'GG', '67'),(5, 'MM', '78'))。由于元组不可变,仅支持读取,数据处理稍显不便。因此,第二种方法将数据读取并存储于DataFrame中,以方便后续处理。

使用pandas库进行数据读写

第二种方案:使用pandas库

具体实现代码如下:

pandas.read_sql函数用法


import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.types import CHAR,INT
connect_info = 'mysql+pymysql://username:passwd@host:3306/dbname?charset=utf8'
engine = create_engine(connect_info) #use sqlalchemy to build link-engine
sql = "SELECT * FROM test0811" #SQL query
df = pd.read_sql(sql=sql, con=engine) #read data to DataFrame 'df'
#write df to table 'test1'
df.to_sql(name = 'test1',
      con = engine,
      if_exists = 'append',
      index = False,
      dtype = {'id': INT(),
          'name': CHAR(length=2),
          'score': CHAR(length=2)
          }
      )

pandas的DataFrame数据结构包含行索引和列索引,使用DataFrame存储数据库表数据十分便捷。通过pandas中的read_sql和to_sql函数,可实现从MySQL数据库读写数据。两个函数的具体介绍如下。

pandas.read_sql函数

复制代码

代码示例如下:

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)


pandas.read_sql的官方文档提供了详细的参数英文说明(建议直接阅读英文文档,虚心向官方资料学习),参考资料链接为http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html

常用参数包括sql(SQL命令或表名)和con(数据库连接引擎,可通过SQLAlchemy或pymysql建立)。从数据库读取数据的基本用法只需提供sql和con即可。其余参数均为默认值,仅在特殊需求时使用,有兴趣者可查阅文档。

代码中的con是通过SQLAlchemy构建的数据库连接引擎,即sqlalchemy.create_engine()。该函数基于URL生成引擎对象,URL通常包含数据库相关信息,典型格式为:

SQLAlchemy引擎构建


dialect+driver://username:password@host:port/database

dialect表示数据库类型,如sqlite、mysql、postgresql、oracle、mssql等;driver是用于连接数据库的DBAPI名称,此处使用pymysql(Python 3.x环境,Python 2.x环境中通常使用mysqldb)。若未指定此项,系统将使用默认DBAPI。

除了使用SQLAlchemy创建engine外,还可以直接使用DBAPI创建engine,代码如下:

直接使用DBAPI创建引擎


con = pymysql.connect(host=localhost, user=username, password=password, database=dbname, charset='utf8')
df = pd.read_sql(sql, con)

pandas.DataFrame.to_sql函数用法

pandas.DataFrame.to_sql函数

复制代码

代码示例如下:

DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)


主要参数介绍如下,详细文档请参考http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html

  • name:输出的目标表名。
  • con:连接数据库的引擎对象。
  • if_exists:包含三种模式{“fail”,“replace”,"append"},默认值为"fail"。fail:若表已存在,引发ValueError错误;replace:若表已存在,覆盖原表数据;append:若表已存在,将数据追加至原表数据之后。
  • index:是否将DataFrame的index单独写入一列,默认值为“True”。
  • index_label:当index为True时,指定哪一列作为DataFrame的index输出。
  • dtype:指定列的数据类型,以字典形式存储{column_name: sql_dtype}。常见数据类型为sqlalchemy.types.INT()和sqlalchemy.types.CHAR(length=x)。注意:INT和CHAR需大写,INT()无需指定长度。

参考资料:

//www.jb51.net/article/157984.htm

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html

http://docs.sqlalchemy.org/en/latest/core/engines.html

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。