当前位置: 技术文章>> 如何使用 Python 操作 MySQL 数据库?

文章标题:如何使用 Python 操作 MySQL 数据库?
  • 文章分类: 后端
  • 3584 阅读

在Python中操作MySQL数据库是一个常见的需求,无论是在数据分析、Web开发还是自动化任务中。Python通过其强大的库支持,特别是mysql-connector-python或更广泛使用的PyMySQLSQLAlchemy等,提供了便捷的方式来与MySQL数据库进行交互。下面,我们将详细探讨如何使用这些库来连接MySQL数据库、执行查询、处理数据以及管理数据库事务。

准备工作

在开始之前,请确保你的环境中已经安装了MySQL数据库,并且你已经创建了一个数据库和相应的表来存储数据。同时,你需要在Python环境中安装必要的库。如果你使用的是mysql-connector-python,可以通过pip安装:

pip install mysql-connector-python

或者,如果你倾向于使用PyMySQL

pip install PyMySQL

连接MySQL数据库

连接MySQL数据库是操作的第一步。这里以mysql-connector-python为例,展示如何建立连接:

import mysql.connector

# 数据库连接配置
config = {
    'user': 'your_username',
    'password': 'your_password',
    'host': '127.0.0.1',
    'database': 'your_database',
    'raise_on_warnings': True,
}

try:
    cnx = mysql.connector.connect(**config)
    print("数据库连接成功")
except mysql.connector.Error as err:
    if err.errno == mysql.connector.errorcode.ER_ACCESS_DENIED_ERROR:
        print("用户名或密码错误")
    elif err.errno == mysql.connector.errorcode.ER_BAD_DB_ERROR:
        print("数据库不存在")
    else:
        print(err)
finally:
    if cnx.is_connected():
        cnx.close()
        print("数据库连接已关闭")

执行SQL查询

连接数据库后,你可以执行SQL查询来获取数据或修改数据库。这里展示如何使用cursor对象来执行查询。

查询数据

try:
    cnx = mysql.connector.connect(**config)
    cursor = cnx.cursor()
    
    query = "SELECT * FROM your_table"
    cursor.execute(query)
    
    for (id, name, age) in cursor:
        print("ID: {}, Name: {}, Age: {}".format(id, name, age))
finally:
    cursor.close()
    cnx.close()

插入数据

try:
    cnx = mysql.connector.connect(**config)
    cursor = cnx.cursor()
    
    add_user = ("INSERT INTO users (name, age) "
                "VALUES (%s, %s)")
    val = ("John Doe", 30)
    cursor.execute(add_user, val)

    cnx.commit()
finally:
    cursor.close()
    cnx.close()

注意,在执行插入、更新或删除操作后,需要调用commit()方法来提交事务,以确保更改被保存到数据库中。

使用预处理语句防止SQL注入

为了防止SQL注入攻击,推荐使用预处理语句(也称为参数化查询)。mysql-connector-python支持这种方式:

try:
    cnx = mysql.connector.connect(**config)
    cursor = cnx.cursor(prepared=True)
    
    query = "INSERT INTO users (name, age) VALUES (%s, %s)"
    user_name = "Jane Doe"
    user_age = 25
    cursor.execute(query, (user_name, user_age))

    cnx.commit()
finally:
    cursor.close()
    cnx.close()

使用PyMySQLSQLAlchemy

虽然上述示例主要基于mysql-connector-python,但PyMySQL的使用方式非常相似,只是在连接数据库时使用的库名不同。而SQLAlchemy则提供了一个更高级的ORM(对象关系映射)和SQL工具包,它允许你以面向对象的方式操作数据库,而不仅仅是执行原始的SQL语句。

使用SQLAlchemy示例

首先,安装SQLAlchemy:

pip install SQLAlchemy

然后,你可以定义一个模型来表示数据库中的表,并使用SQLAlchemy的ORM功能来操作这些模型:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# 创建数据库引擎
engine = create_engine('mysql+pymysql://your_username:your_password@localhost/your_database')

# 创建所有表
Base.metadata.create_all(engine)

# 创建Session
Session = sessionmaker(bind=engine)
session = Session()

# 添加新用户
new_user = User(name='Alice', age=28)
session.add(new_user)
session.commit()

# 查询用户
users = session.query(User).all()
for user in users:
    print(f"ID: {user.id}, Name: {user.name}, Age: {user.age}")

# 关闭Session
session.close()

处理异常和错误

在编写数据库操作代码时,处理异常和错误是非常重要的。Python的try...except语句块可以帮助你捕获和处理可能出现的错误,比如连接失败、执行SQL语句时的语法错误等。

总结

通过上面的介绍,你应该已经掌握了如何在Python中使用mysql-connector-pythonPyMySQLSQLAlchemy来连接MySQL数据库、执行SQL查询、处理数据以及管理数据库事务。在实际的项目中,选择哪个库取决于你的具体需求,比如你是否需要ORM支持、对性能的要求以及个人偏好等。无论你选择哪个库,掌握数据库操作的基本概念和最佳实践都是非常重要的。

希望这篇文章能对你有所帮助,如果你对Python操作MySQL数据库还有更多的问题或需要进一步的指导,欢迎访问我的码小课网站,那里有更多关于编程和数据处理的精彩内容等待你去探索。

推荐文章