当前位置:   article > 正文

python连接MySQL使用_python连接数据库创造引擎

python连接数据库创造引擎

法一: pymysql 

步骤 1:连接 MySQL 数据库

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

  1. import pymysql
  2. # 连接 MySQL 数据库
  3. conn = pymysql.connect(
  4. host='159.xxx.xxx.216', # 主机名
  5. port=3306, # 端口号,MySQL默认为3306
  6. user='xxxx', # 用户名
  7. password='xxxx', # 密码
  8. database='xx', # 数据库名称
  9. )

步骤 2:执行 SQL 查询语句


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

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

 

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

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

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

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

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

最后,我们需要关闭游标对象和数据库连接,以释放资源

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

法二:SQLAlchemy

使用 SQLAlchemy 的 create_engine 函数连接 MySQL 数据库


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

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

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

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

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

法三:mysql-connector-python 

1. 安装MySQL驱动


在开始之前,需要安装Python的MySQL数据库驱动程序。

最常用的驱动程序之一是mysql-connector-python

使用pip进行安装:

pip install mysql-connector-python


2. 连接MySQL数据库


在进行任何数据库操作之前,首先需要建立与MySQL数据库的连接。通常,需要提供数据库的主机名、用户名、密码和数据库名称。

以下是连接到MySQL数据库的示例:

  1. import mysql.connector
  2. # 创建数据库连接
  3. db = mysql.connector.connect(
  4.     host="localhost",  # MySQL服务器地址
  5.     user="username",   # 用户名
  6.     password="password",  # 密码
  7.     database="mydatabase"  # 数据库名称
  8. )
  9. # 创建游标对象,用于执行SQL查询
  10. cursor = db.cursor()


3. 创建数据库


创建一个新的数据库,可以执行以下操作:

  1. # 创建一个名为"mydatabase"的新数据库
  2. cursor.execute("CREATE DATABASE mydatabase")

4. 创建数据表


在数据库中,数据以表格形式组织。在创建表格之前,需要定义表格的结构,包括列名、数据类型和约束。

以下是一个示例:

  1. # 创建一个名为"customers"的数据表
  2. cursor.execute("CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")


5. 插入数据


插入数据是将数据添加到数据表中的过程。可以使用SQL的INSERT INTO语句来执行插入操作。

以下是一个示例:

  1. # 插入一条记录到"customers"表中
  2. sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
  3. values = ("John Smith", "123 Main St")
  4. cursor.execute(sql, values)
  5. # 提交更改到数据库
  6. db.commit()
  7. print(f"插入了 {cursor.rowcount} 条记录")


6. 查询数据


查询数据是从数据库中检索数据的过程。使用SQL的SELECT语句来执行查询操作。

以下是一个示例:

  1. # 查询所有记录
  2. cursor.execute("SELECT * FROM customers")
  3. # 获取查询结果
  4. results = cursor.fetchall()
  5. for row in results:
  6.     print(row)


7. 更新数据


更新数据是修改现有数据的过程。使用SQL的UPDATE语句来执行更新操作。

以下是一个示例:

  1. # 更新"customers"表中id为1的记录
  2. sql = "UPDATE customers SET address = %s WHERE id = %s"
  3. values = ("456 Elm St", 1)
  4. cursor.execute(sql, values)
  5. # 提交更改到数据库
  6. db.commit()
  7. print(f"更新了 {cursor.rowcount} 条记录")


8. 删除数据


删除数据是从数据库中删除数据的过程。使用SQL的DELETE语句来执行删除操作。

以下是一个示例:

  1. # 删除"customers"表中id为1的记录
  2. sql = "DELETE FROM customers WHERE id = %s"
  3. values = (1,)
  4. cursor.execute(sql, values)
  5. # 提交更改到数据库
  6. db.commit()
  7. print(f"删除了 {cursor.rowcount} 条记录")


9. 执行事务


事务是一组SQL操作,要么全部成功,要么全部失败。在某些情况下,需要使用事务来确保数据库的完整性。

以下是一个示例:

  1. try:
  2.     db.start_transaction()
  3.     # 执行一系列SQL操作
  4.     cursor.execute("INSERT INTO customers (name, address) VALUES (%s, %s)", ("Alice", "789 Oak St"))
  5.     cursor.execute("UPDATE customers SET address = %s WHERE id = %s", ("789 Elm St", 2))
  6.     db.commit()  # 提交事务
  7. except:
  8.     db.rollback()  # 事务回滚,撤销之前的操作


10. 关闭数据库连接


在完成数据库操作后,不要忘记关闭数据库连接,以释放资源。

  1. cursor.close()  # 关闭游标
  2. db.close()  # 关闭数据库连接


11.完整MySQL数据库编程示例

示例:一个完整的MySQL数据库编程示例
以下是一个完整的MySQL数据库编程示例,包括连接数据库、创建表格、插入数据、查询数据、更新数据和删除数据:

  1. import mysql.connector
  2. # 创建数据库连接
  3. db = mysql.connector.connect(
  4.     host="localhost",
  5.     user="username",
  6.     password="password",
  7.     database="mydatabase"
  8. )
  9. # 创建游标对象
  10. cursor = db.cursor()
  11. # 创建一个名为"customers"的数据表
  12. cursor.execute("CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")
  13. # 插入记录
  14. sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
  15. values = [("John Smith", "123 Main St"), ("Alice Johnson", "456 Elm St")]
  16. cursor.executemany(sql, values)
  17. db.commit()
  18. # 查询记录
  19. cursor.execute("SELECT * FROM customers")
  20. results = cursor.fetchall()
  21. for row in results:
  22.     print(row)
  23. # 更新记录
  24. sql = "UPDATE customers SET address = %s WHERE name = %s"
  25. values = ("789 Oak St", "Alice Johnson")
  26. cursor.execute(sql, values)
  27. db.commit()
  28. # 删除记录
  29. sql = "DELETE FROM customers WHERE name = %s"
  30. values = ("John Smith",)
  31. cursor.execute(sql, values)
  32. db.commit()
  33. # 关闭游标和数据库连接
  34. cursor.close()
  35. db.close()


12.安全性注意事项


在进行数据库编程时,请务必注意安全性。避免直接将用户提供的数据插入SQL语句,以防止SQL注入攻击。可以使用参数化查询或ORM(对象关系映射)来增强安全性。
 

法一、法二函数封装

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

  1. import pandas as pd
  2. import pymysql
  3. from sqlalchemy import create_engine
  4. def query_mysql(sql_query, host=None, port=None, user=None, password=None, database=None, engine=None):
  5. """
  6. 连接 MySQL 数据库,执行查询,并将查询结果转化为 Pandas DataFrame 对象。
  7. :param sql_query: SQL 查询语句
  8. :param host: 主机名,默认为 None
  9. :param port: 端口号,默认为 None
  10. :param user: 用户名,默认为 None
  11. :param password: 密码,默认为 None
  12. :param database: 数据库名称,默认为 None
  13. :param engine: SQLAlchemy 的数据库引擎对象,默认为 None
  14. :return: Pandas DataFrame 对象
  15. """
  16. # 如果未提供数据库连接引擎,则使用 pymysql 库连接 MySQL 数据库
  17. if engine is None:
  18. # 连接 MySQL 数据库
  19. conn = pymysql.connect(
  20. host=host,
  21. port=port,
  22. user=user,
  23. password=password,
  24. database=database,
  25. )
  26. # 创建游标对象
  27. cursor = conn.cursor()
  28. # 执行 SQL 查询语句
  29. cursor.execute(sql_query)
  30. # 获取查询结果
  31. result = cursor.fetchall()
  32. # 将查询结果转化为 Pandas DataFrame 对象
  33. df = pd.DataFrame(result, columns=[i[0] for i in cursor.description])
  34. # 关闭游标和数据库连接
  35. cursor.close()
  36. conn.close()
  37. # 如果已提供数据库连接引擎,则使用 SQLAlchemy 库连接 MySQL 数据库
  38. else:
  39. # 执行 SQL 查询语句,并将结果转化为 Pandas DataFrame 对象
  40. df = pd.read_sql(sql_query, con=engine)
  41. 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 对象。

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

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

模板

1.pymysql模版

  1. # 法一:
  2. import pymysql
  3. import pandas as pd
  4. def query_data(sql_query):
  5. # 连接数据库
  6. conn = pymysql.connect(
  7. host='xxx.xxx.xxx.xxx', # 主机名
  8. port=3306, # 端口号,MySQL默认为3306
  9. user='xxx', # 用户名
  10. password='xxx', # 密码
  11. database='xxx', # 数据库名称
  12. )
  13. try:
  14. # 创建游标对象
  15. cursor = conn.cursor()
  16. # 执行 SQL 查询语句
  17. cursor.execute(sql_query)
  18. # 获取查询结果
  19. result = cursor.fetchall()
  20. # 获取查询结果的字段名和元数据
  21. columns = [col[0] for col in cursor.description]
  22. # 将查询结果封装到 Pandas DataFrame 中
  23. df = pd.DataFrame(result, columns=columns)
  24. return df
  25. finally:
  26. # 关闭游标和连接
  27. cursor.close()
  28. conn.close()
  29. db_data = query_data(sql_query)

2.sqlalchemy模版 

1)普通版 

  1. from sqlalchemy import create_engine
  2. import pandas as pd
  3. def getdata_from_db(query, db, host='xxx.xxx.xxx.xxx', port=3306, user='xxx', password='xxx'):
  4. try:
  5. engine = create_engine(f'mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset=utf8')
  6. # 使用 with 语句自动管理连接的生命周期
  7. with engine.connect() as conn:
  8. data = pd.read_sql(query, conn)
  9. return data
  10. except Exception as e:
  11. print(f"Error occurred when executing SQL query: {e}")
  12. return None
  13. db_data = getdata_from_db(sql_query, 'ad')

 2)精简版

  1. # 超级精简版
  2. from sqlalchemy import create_engine
  3. import pandas as pd
  4. engine = create_engine(f'mysql+pymysql://xxx:xxx@xxx:3306/xx?charset=utf8')
  5. db_data = pd.read_sql(sql, engine)
  6. db_data.head()

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

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

总之,学习如何连接 MySQL 数据库并将查询结果转化为 Pandas dataframe 对象是数据分析和建模过程中的重要一步
 


 原文链接:https://blog.csdn.net/Saki_Python/article/details/134135687                      
原文链接:https://blog.csdn.net/weixin_44976611/article/details/130733910

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/778521
推荐阅读
相关标签
  

闽ICP备14008679号