Python 连接 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 pd
import pymysql
from sqlalchemy import create_engine


def 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 pymysql
import pandas as pd

def 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_engine
import pandas as pd

def 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_engine
import pandas as pd

engine = 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://www.toymoban.com/news/detail-575085.html

到了这里,关于Python 连接 MySQL 数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Django 之连接 Mysql 数据库详解

    博客:https://blog.csdn.net/qq_34745941/article/details/122549376 若已安装,请忽略。 主要使用的文件如图 若 pip 安装失败,可进入 Python 官方库中下载 whl 文件,操作可参考: 博客:https://blog.csdn.net/qq_34745941/article/details/106341898 在 settings.py 中,配置 Mysql 的连接串 扩展: Django 也支持其

    2024年02月04日
    浏览(40)
  • 使用Python pymysql连接Mysql数据库-菜鸟教程

    1、安装pymysql模块 pip install pymysql 2、启动Mysql数据库服务 net start mysql80  3、连接数据库 运行结果如下  4、创建数据库表 执行成功后,在本地登录mysql数据库进行查看验证   5、数据库插入操作  执行程序后在本地查看验证  6、数据库查询操作 Python查询Mysql使用 fetchone() 方法

    2024年02月04日
    浏览(34)
  • 4 种 Python 连接 MySQL 数据库的方法,速来学习!!

    用 Python 连接到 MySQL 数据库的方法不是很系统 ,实际中有几种不同的连接方法,而且不是所有的方法都能与不同的操作系统很好地配合。除此之外,启用SSL也是一个挑战。 本文 涵盖了四种方法 ,你可以用它们来连接你的Python应用程序和MySQL。这些例子将使用PlanetScale,一个

    2024年02月05日
    浏览(38)
  • 如何用python连接mysql和mongodb数据库【极简版】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章

    2024年01月23日
    浏览(32)
  • 使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代应用程序开发中,与数据库进行交互是至关重要的一环。Python提供了强大的库来连接和操作各种类型的数据库,其中包括SQLite和MySQL。

    2024年03月27日
    浏览(45)
  • python-Excel数据模型文档转为MySQL数据库建表语句(需要连接数据库)-工作小记

    将指定Excel文档转为create table 建表语句。该脚本适用于单一且简单的建表语句 呈现效果  代码   仅作为笔记记录,如有问题请各位大佬来指导 

    2024年02月14日
    浏览(36)
  • MySQL数据库(Python)

    常用指令 linux安装 更新YUM源:sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm 安装MySQL:sudo yum -y install mysql-community-server --enablerepo=mysql80-community --nogpgcheck 启动数据库 net start mysql或者sudo systemctl start mysqld 停止MySQL服务 sudo service mysql stop 启动MySQL服务 sudo servic

    2023年04月13日
    浏览(23)
  • Python 操作 MySQL:使用 mysql-connector-python 操作 MySQL 数据库

    大家好,我是水滴~~ 当涉及到使用 Python 操作 MySQL 数据库时, mysql-connector-python 库是一个强大而常用的选择。该库提供了与 MySQL 数据库的交互功能,使您能够执行各种数据库操作,如连接数据库、执行查询和插入数据等。在本文中,我们将介绍如何使用 mysql-connector-python 库来

    2024年02月04日
    浏览(35)
  • Python——操作MySQL数据库

    😊学习永无止境,记得每天学习新的知识!! 在很多业务场景中,我们或多或少都要对数据库上的数据进行的一系列操作, 包括读取数据、写数据、更新或修改数据、删除数据 等。这些操作可以通过编写SQL语句来实现,也可以通过使用数据库管理系统提供的API接口来实现。

    2024年02月09日
    浏览(33)
  • Python 操作 MySQL 数据库

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问Python数据库接口及API查看详细的支

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包