广告
返回顶部
首页 > 资讯 > 数据库 >Python 连接 MySQL 数据库
  • 794
分享到

Python 连接 MySQL 数据库

python 2023-08-16 17:08:18 794人浏览 安东尼
摘要

在实际数据分析和建模过程中,我们通常需要从数据库中读取数据,并将其转化为 pandas dataframe 对象进行进一步处理。而 Mysql 数据库是最常用的关系型数据库之一,因此在 python 中如何连接 mysql 数据库并查询数据

在实际数据分析和建模过程中,我们通常需要从数据库中读取数据,并将其转化为 pandas dataframe 对象进行进一步处理。而 Mysql 数据库是最常用的关系型数据库之一,因此在 python 中如何连接 mysql 数据库并查询数据成为了一个重要的问题。

本文将介绍两种方法来连接 Mysql 数据库,并将查询结果转化为 Pandas dataframe 对象:第一种方法使用 pymysql 库来连接 MySQL 数据库;第二种方法则使用 SQLAlchemy 的 create_engine 函数创建 MySQL 数据库连接引擎。同时,针对这两种方法,我们还将对代码进行封装和优化,提高程序的可读性和健壮性。

方法一:使用 pymysql 库连接 MySQL 数据库

步骤 1:连接 MySQL 数据库

首先,我们需要使用 pymysql 库来连接 MySQL 数据库。具体代码如下:

import pymysql# 连接 MySQL 数据库conn = pymysql.connect(    host='159.xxx.xxx.216',  # 主机名    port=3306,         # 端口号,MySQL默认为3306    user='xxxx',       # 用户名    passWord='xxxx', # 密码    database='xx',   # 数据库名称)

在上面的代码中,我们通过 pymysql 库的 connect() 函数连接 MySQL 数据库,并指定主机名、端口号、用户名、密码和数据库名称等参数。如果连接成功,则该函数将返回一个数据库连接对象 conn。

步骤 2:执行 SQL 查询语句
连接 MySQL 数据库之后,我们就可以使用游标对象来执行 SQL 查询语句,如下所示:

# 创建游标对象cursor = conn.cursor()# 执行 SQL 查询语句cursor.execute("SELECT * FROM users WHERE gender='female'")# 获取查询结果result = cursor.fetchall()

在上面的代码中,我们使用 cursor() 方法创建游标对象 cursor,并使用 execute() 方法执行 SQL 查询语句。在执行查询时,我们可以使用任何符合 MySQL 语法的 SQL 查询语句。最后,我们使用 fetchall() 方法获取查询结果。

步骤 3:将查询结果转化为 Pandas dataframe 对象

获取查询结果之后,我们需要将其转化为 Pandas dataframe 对象,以便于进行进一步的数据处理和分析。具体代码如下

import pandas as pd# 将查询结果转化为 Pandas dataframe 对象df = pd.DataFrame(result, columns=[i[0] for i in cursor.description])

在上面的代码中,我们使用 pd.DataFrame() 方法将查询结果转化为 Pandas dataframe 对象。在转化过程中,我们需要指定字段名,可以通过游标对象的 description 属性来获取查询结果的元数据,其中包括字段名等信息。

步骤 4:关闭游标和数据库连接

最后,我们需要关闭游标对象和数据库连接,以释放资源。具体代码如下:

# 关闭游标和数据库连接cursor.close()conn.close()

方法二:使用 SQLAlchemy 的 create_engine 函数连接 MySQL 数据库

除了使用 pymysql 库连接 MySQL 数据库之外,我们还可以使用 SQLAlchemy 的 create_engine 函数创建 MySQL 数据库连接引擎,并使用 Pandas 库中的 read_sql 函数直接将查询结果转化为 Pandas dataframe 对象。

# 步骤 1:创建 MySQL 数据库连接引擎from sqlalchemy import create_engine# 创建 MySQL 数据库连接引擎engine = create_engine('mysql+pymysql://username:password@host:port/database')步骤 2:执行 SQL 查询语句并将结果转化为 Pandas dataframe 对象import pandas as pd# 执行 SQL 查询语句,并将结果转化为 Pandas dataframe 对象df = pd.read_sql("SELECT * FROM users WHERE gender='female'", con=engine)# 关闭数据库连接engine.dispose()

在上面的代码中,我们使用 create_engine 函数创建了一个 MySQL 数据库连接引擎。其中,我们需要将数据库连接信息输入到一个字符串中,并作为函数的参数传入。其中,username 和 password 分别表示登录 MySQL 数据库所需的用户名和密码,host 和 port 表示 MySQL 数据库的主机名和端口号,database 表示要连接的 MySQL 数据库名称。

接着使用使用 pd.read_sql() 函数执行 SQL 查询语句,并将数据库连接引擎对象 engine 作为参数传入。在执行查询时,我们可以使用任何符合 MySQL 语法的 SQL 查询语句。最后,该函数将返回查询结果的 Pandas dataframe 对象。

最后,我们需要关闭数据库连接,以释放资源。

函数封装

以上介绍了两种方法来连接 MySQL 数据库,并将查询结果转化为 Pandas dataframe 对象。为了方便重复使用,我们可以将这些代码封装成一个函数。

import pandas as pdimport pymysqlfrom sqlalchemy import create_enginedef query_mysql(sql_query, host=None, port=None, user=None, password=None, database=None, engine=None):    """    连接 MySQL 数据库,执行查询,并将查询结果转化为 Pandas DataFrame 对象。        :param sql_query: SQL 查询语句    :param host: 主机名,默认为 None    :param port: 端口号,默认为 None    :param user: 用户名,默认为 None    :param password: 密码,默认为 None    :param database: 数据库名称,默认为 None    :param engine: SQLAlchemy 的数据库引擎对象,默认为 None        :return: Pandas DataFrame 对象    """    # 如果未提供数据库连接引擎,则使用 pymysql 库连接 MySQL 数据库    if engine is None:        # 连接 MySQL 数据库        conn = pymysql.connect(            host=host,            port=port,            user=user,            password=password,            database=database,        )        # 创建游标对象        cursor = conn.cursor()        # 执行 SQL 查询语句        cursor.execute(sql_query)        # 获取查询结果        result = cursor.fetchall()        # 将查询结果转化为 Pandas DataFrame 对象        df = pd.DataFrame(result, columns=[i[0] for i in cursor.description])        # 关闭游标和数据库连接        cursor.close()        conn.close()    # 如果已提供数据库连接引擎,则使用 SQLAlchemy 库连接 MySQL 数据库    else:        # 执行 SQL 查询语句,并将结果转化为 Pandas DataFrame 对象        df = pd.read_sql(sql_query, con=engine)    return df

在上面的代码中,我们创建了一个名为 query_mysql 的函数,用于连接 MySQL 数据库,并执行查询操作。该函数接受以下参数:

  • sql_query:SQL 查询语句;
  • host:主机名,默认为 None;
  • port:端口号,默认为 None;
  • user:用户名,默认为 None;
  • password:密码,默认为 None;
  • database:数据库名称,默认为 None;
  • engine:SQLAlchemy 的数据库引擎对象,默认为 None。

在函数中,我们首先判断是否已提供数据库连接引擎对象。如果未提供,则使用 pymysql 库连接MySQL 数据库,并执行查询操作,步骤与前面的第一种方法相同。如果已提供数据库连接引擎对象,则使用 SQLAlchemy 库连接 MySQL 数据库,并执行查询操作,步骤与前面的第二种方法相同。

最后,在函数中我们返回查询结果的 Pandas dataframe 对象。

# 使用 pymysql 库连接 MySQL 数据库df1 = query_mysql(    sql_query="SELECT * FROM users WHERE gender='female'",    host='159.xxx.xxx.216',  # 主机名    port=3306,         # 端口号,MySQL默认为3306    user='xxxx',       # 用户名    password='xxxx', # 密码    database='xx',   # 数据库名称)# 使用 SQLAlchemy 库连接 MySQL 数据库engine = create_engine('mysql+pymysql://xxx:xxx@localhost:3306/ad')df2 = query_mysql(sql_query="SELECT * FROM users WHERE gender='female'", engine=engine)

通过使用 query_mysql 函数,我们可以更加方便地连接 MySQL 数据库并查询数据,并且代码量更少、可读性更好。同时,由于该函数使用了 pymysql 和 SQLAlchemy 两个库,因此也具有较好的跨平台性,可以在不同的操作系统和环境下运行。

最后也分享一下个人通过使用的模板:

# 法一:import pymysqlimport pandas as pddef query_data(sql_query):    # 连接数据库    conn = pymysql.connect(        host='xxx.xxx.xxx.xxx',  # 主机名        port=3306,         # 端口号,MySQL默认为3306        user='xxx',       # 用户名        password='xxx', # 密码        database='xxx',   # 数据库名称    )    try:        # 创建游标对象        cursor = conn.cursor()        # 执行 SQL 查询语句        cursor.execute(sql_query)        # 获取查询结果        result = cursor.fetchall()        # 获取查询结果的字段名和元数据        columns = [col[0] for col in cursor.description]        # 将查询结果封装到 Pandas DataFrame 中        df = pd.DataFrame(result, columns=columns)        return df    finally:        # 关闭游标和连接        cursor.close()        conn.close()db_data = query_data(sql_query)# 法二:from sqlalchemy import create_engineimport pandas as pddef getdata_from_db(query, db, host='xxx.xxx.xxx.xxx', port=3306, user='xxx', password='xxx'):    try:        engine = create_engine(f'mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset=utf8')        # 使用 with 语句自动管理连接的生命周期        with engine.connect() as conn:            data = pd.read_sql(query, conn)        return data    except Exception as e:        print(f"Error occurred when executing SQL query: {e}")        return None    db_data = getdata_from_db(sql_query, 'ad')# 法三:超级精简版from sqlalchemy import create_engineimport pandas as pdengine = create_engine(f'mysql+pymysql://xxx:xxx@xxx:3306/xx?charset=utf8')db_data = pd.read_sql(sql, engine)db_data.head()

最后,说一下在访问数据库时,可能存在一些潜在的问题和注意事项。

  • 首先,在使用 pandas.read_sql() 时,需要在 SQL 查询语句中包含所有必要的过滤条件、排序方式等信息,以确保返回的结果集合是正确的,而不是整个表或视图中的所有数据。如果没有限制返回的数据量,可能会导致内存溢出或其他性能问题。因此,在实际应用中,推荐使用 LIMIT 等关键字来设置最大返回数据量,以便更好地控制查询结果。
  • 其次,在实际生产环境中,为了避免泄漏敏感信息和减少攻击面,建议将数据库连接字符串等敏感信息存储在单独的配置文件中,并且只授权给有限的用户使用。另外,在向 SQL 查询语句中传递参数时,也需要进行安全过滤和转义,以避免 SQL 注入等安全问题。
  • 最后,在使用完毕后,需要及时关闭数据库连接,以释放资源并减少数据库服务器的负载。或者,可以使用 with 语句自动管理连接的生命周期。

总之,学习如何连接 MySQL 数据库并将查询结果转化为 Pandas dataframe 对象是数据分析和建模过程中的重要一步。希望本文对您有所帮助!

来源地址:https://blog.csdn.net/weixin_44976611/article/details/130733910

您可能感兴趣的文档:

--结束END--

本文标题: Python 连接 MySQL 数据库

本文链接: https://www.lsjlt.com/news/371744.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python连接MySQL数据库
    模块功能:connect()方法 * connect()方法用于连接数据库,返回一个数据库连接对象。如果要连接一个位于host.remote.com服务器上名为fourm的MySQL数据库,连接串可以这样写: ...
    99+
    2023-01-31
    数据库 python MySQL
  • Python 连接 MySQL 数据库
    在实际数据分析和建模过程中,我们通常需要从数据库中读取数据,并将其转化为 Pandas dataframe 对象进行进一步处理。而 MySQL 数据库是最常用的关系型数据库之一,因此在 Python 中如何连接 MySQL 数据库并查询数据...
    99+
    2023-08-16
    python
  • python 长连接 mysql数据库
    python 长连接数据库python链接mysql中没有长链接的概念,但我们可以利用mysql的ping机制,来实现长链接功能思路:1 python mysql 的cping 函数会校验链接的可用性,如果连接不可用将会产生异常2 利用这一...
    99+
    2023-01-31
    数据库 python mysql
  • Python连接MySQL数据库(mys
    本文介绍的库是mysql-connector-python,它是MySQL的Python驱动,使用它你可以连接MySQL数据库,访问、操作表和数据。MySQL的Python驱动也不少,但是mysql-connector-python是最流行...
    99+
    2023-01-31
    数据库 Python MySQL
  • python连接数据库操作MySQL
    参考:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001391435131816c6...
    99+
    2022-10-18
  • python怎么连接mysql数据库
    这篇文章给大家分享的是有关python怎么连接mysql数据库的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。python怎么连接mysql数据库MySQLdb 模块不支持 Pyt...
    99+
    2022-10-18
  • mysql 连接数据库
    1、首先启动mysql 并链接数据 小意思吧!都会了是吧    mysql -uroot -p //连接数据    net start mysql /...
    99+
    2022-05-21
    连接数据库 mysql
  • Python 连接mysql数据库进行操
    1.MySQLdb 模块是用于Python链接Mysql数据库的接口,默认是没有安装的[root@python ~]# yum  install  MySQL-python   -y2.创建python脚本[root@python ~]# ...
    99+
    2023-01-31
    数据库 Python mysql
  • 使用python连接mysql数据库数据方式
    目录1.fetchone/fetchmany/fetchall2.pandas.read_sql()前言: 使用python连接mysql数据库数据 有以下两种读取数据的方式推荐: ...
    99+
    2022-11-13
  • Node.js 连接 mysql 数据库
    目录 一、安装驱动 二、连接数据库 1、数据库连接的配置信息 数据库连接参数说明 2、封装 mysql 的执行语句 3、后端路由文件  三、数据库操作( CURD ) 1、查询数据 2、插入数据 3、更新数据 4、删除数据 4、获取受影响的...
    99+
    2023-09-09
    mysql 数据库 node.js
  • JSP连接MySQL数据库
    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者成长之路 ✨...
    99+
    2023-08-16
    java mysql tomcat
  • Python3 连接Mysql数据库
    初学Python ,目前无论是电子书还是网上的教程,都是针对于python2.7,但是对于部分语法以及模块都有变化。比如urllib2是python自带的模块,不需要下载。urllib2在python3.x...
    99+
    2022-10-18
  • php连接mysql数据库
        连接数据库:使用面向对象的方法;1.造一个mysqli对象,造连接对象2.准备一条SQL语句3.执行SQL语句,如果是查询语句。成功返回结果及对象4.从结果集...
    99+
    2022-10-18
  • jdbc连接MySql数据库
    jdbc连接MySql数据库 package com.zhy; import com.mysql.jdbc.Driver; import java.sql.*; public class TestJdbc { publi...
    99+
    2020-09-18
    jdbc连接MySql数据库 数据库入门 数据库基础教程 数据库 mysql
  • python3连接MySQL数据库
    环境:python 3.6.1 + mysql 5.1 Python3 支持用 pymysql 模块来链接数据库 1、pymysql安装 windows下:pip install pymysql 直接安装 官方文档:http://...
    99+
    2023-01-31
    数据库 MySQL
  • idea连接MySQL数据库
    文章目录 前言一、idea创建连接MySQL操作步骤 二、配置连接参数操作步骤 总结 前言 提示:idea连接数据库前,先需要查看自己数据库安装、配置是否完成: 1.打开mysql命令控制台 2.输入密码,到如下页面...
    99+
    2023-08-17
    mysql intellij-idea 数据库
  • C#连接MySQL数据库
    目录 一、引用MySql.Data.dll文件 二、连接、关闭数据库 三、数据库增删改查 附:完整代码 一、引用MySql.Data.dll文件 创建C#窗体应用程序,解决方案资源管理器中找到“引用”,右键,选择添加引用。 在MyS...
    99+
    2023-10-28
    c# 数据库 mysql
  • Java连接mysql数据库
    文章目录 一、Java连接mysql数据库1.1 流程1.2 一个测试连接的java程序 二、优化:创建一个工具类2.1 存在的问题2.2 创建配置文件和工具类2.3 测试使用工具类进行CRUD操作 三、SQL注入问题3.1...
    99+
    2023-08-16
    数据库 mysql java jdbc sql注入
  • C# 连接 MySQL 数据库
    目录 一、需求 二、新建 C# 项目 三、MySQL数据库 四、MySqlHelper 五、测试 一、需求 C# 使用 MySQL 数据库的情况还是比较少的,大部分使用 Windows 平台一般使用 SQL Server,在两年前我...
    99+
    2023-09-02
    c# 数据库
  • c++ 连接mysql数据库
            使用vs2019对window11中的数据库进行连接 1. 配置连接环境         首先需要把mysql中的头文件和库文件放入到c++项目工程中 打开安装MySQL的目录,在windows系统中如果是默认路径,应该和我...
    99+
    2023-09-03
    数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作