【AI总结】python连接MySQL(1)- Python连接MySQL:驱动库与ORM框架全面指南

Python连接MySQL:驱动库与ORM框架全面指南

摘要:本文详解Python操作MySQL的两种方式——原生驱动库与ORM框架,对比主流工具并提供实战代码示例,助你高效管理数据库!


一、为什么需要连接MySQL?

Python在数据分析、Web开发等领域广泛应用,而MySQL作为最流行的开源关系型数据库,其与Python的交互必不可少。操作方式主要分两类:

  1. 原生驱动库:直接执行SQL语句,灵活高效
  2. ORM框架:对象关系映射,用Python类操作数据库,提升开发效率

二、原生驱动库推荐及实战

1. mysql-connector-python(Oracle官方维护)

# 安装:pip install mysql-connector-python
import mysql.connector

config = {
  "user": "root",
  "password": "123456",
  "host": "localhost",
  "database": "test_db"
}

try:
    conn = mysql.connector.connect(**config)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE age > %s", (20,))
    print(cursor.fetchall())  # 输出查询结果
except Exception as e:
    print(f"Database error: {e}")
finally:
    cursor.close()
    conn.close()

2. PyMySQL(纯Python实现,兼容性好)

# 安装:pip install pymysql
import pymysql

conn = pymysql.connect(
    host='localhost', 
    user='root',
    password='123456',
    database='test_db'
)
with conn.cursor() as cursor:
    cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ('Alice', 25))
    conn.commit()  # 提交事务

三、ORM框架:用Python类操作数据库

1. SQLAlchemy(企业级首选)

# 安装:pip install sqlalchemy pymysql
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

Base = declarative_base()

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

# 连接数据库(格式:mysql+pymysql://user:password@host/db)
engine = create_engine("mysql+pymysql://root:123456@localhost/test_db")
Base.metadata.create_all(engine)  # 自动建表

# 操作数据
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name="Bob", age=30)
session.add(new_user)
session.commit()

# 查询数据
users = session.query(User).filter(User.age > 20).all()

2. Peewee(轻量级,适合快速开发)

# 安装:pip install peewee pymysql
from peewee import *

db = MySQLDatabase('test_db', user='root', password='123456', host='localhost')

class User(Model):
    name = CharField()
    age = IntegerField()
    
    class Meta:
        database = db

db.connect()
db.create_tables([User])  # 创建表

# 插入数据
User.create(name="Charlie", age=28)

# 查询数据
query = User.select().where(User.age > 25)
for user in query:
    print(user.name, user.age)

3. Django ORM(Django项目内置)

# 在Django项目的models.py中定义
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()

# 命令行生成迁移文件并执行
# python manage.py makemigrations
# python manage.py migrate

# 在视图函数中使用
users = User.objects.filter(age__gt=20)

四、对比总结:如何选择?

工具类型代表库适用场景
原生驱动PyMySQL需要精细控制SQL/高性能查询
全能ORMSQLAlchemy大型项目/复杂事务处理
轻量ORMPeewee快速原型开发/小型应用
全栈框架内置ORMDjango ORM使用Django开发Web应用

性能建议:高频写入场景用原生驱动,复杂业务逻辑用ORM提升可维护性。


五、常见问题解决方案

  1. 连接超时

    # 在connect参数中添加超时设置
    conn = pymysql.connect(..., connect_timeout=10)
    
  2. 中文乱码
    连接字符串添加编码参数:

    mysql+pymysql://root:123456@localhost/test_db?charset=utf8mb4
    
  3. ORM批量插入优化

    # SQLAlchemy批量插入
    session.bulk_save_objects([User(name=f"user{i}") for i in range(1000)])
    session.commit()
    

结语:根据项目需求灵活选择工具,小型项目可用Peewee快速迭代,企业级系统推荐SQLAlchemy。掌握原生SQL与ORM的双重技能,才是Python工程师的终极武器!

技术栈扩展

  • 异步支持:aiomysql + SQLAlchemy 1.4+
  • 数据库迁移:Alembic(配合SQLAlchemy)
  • 连接池:SQLAlchemy自带连接池 / DBUtils

GitHub资源


关键词:Python MySQLORM框架SQLAlchemy教程PyMySQL示例数据库连接

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝吻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值