Python 连接 MySQL 的几种方法


Posted in Python onSeptember 09, 2020

尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的几种方式,你可以在实际开发过程中根据实际情况合理选择。

1、MySQL-python

MySQL-python 又叫 MySQLdb,是 Python 连接 MySQL 最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持 Python2.x,而且安装的时候有很多前置条件,因为它是基于C开发的库,在 Windows 平台安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代的是它的衍生版本。

# 前置条件
sudo apt-get install python-dev libmysqlclient-dev # Ubuntu
sudo yum install python-devel mysql-devel # Red Hat / CentOS

# 安装
pip install MySQL-python

Windows 直接通过下载 exe 文件安装

#!/usr/bin/python
import MySQLdb

db = MySQLdb.connect(
   host="localhost",  # 主机名
   user="john",     # 用户名
   passwd="megajonhy", # 密码
   db="jonhydb")    # 数据库名称

# 查询前,必须先获取游标
cur = db.cursor()

# 执行的都是原生SQL语句
cur.execute("SELECT * FROM YOUR_TABLE_NAME")

for row in cur.fetchall():
  print(row[0])

db.close()

2、mysqlclient

由于 MySQL-python 年久失修,后来出现了它的 Fork 版本 mysqlclient,完全兼容 MySQLdb,同时支持 Python3.x,是 Django ORM的依赖工具,如果你想使用原生 SQL 来操作数据库,那么推荐此驱动。安装方式和 MySQLdb 是一样的,Windows 可以在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 网站找到 对应版本的 whl 包下载安装。

Python 连接 MySQL 的几种方法

# Windows安装
pip install some-package.whl

# linux 前置条件
sudo apt-get install python3-dev # debian / Ubuntu
sudo yum install python3-devel # Red Hat / CentOS
brew install mysql-connector-c # macOS (Homebrew)

pip install mysqlclient

3、PyMySQL

PyMySQL 是纯 Python 实现的驱动,速度上比不上 MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容 MySQL-python

pip install PyMySQL
# 为了兼容mysqldb,只需要加入
pymysql.install_as_MySQLdb()

一个例子

import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', passwd="xxx", db='mysql')
cur = conn.cursor()
cur.execute("SELECT Host,User FROM user")
for r in cur:
  print(r)
cur.close()
conn.close()

4、peewee

写原生 SQL 的过程非常繁琐,代码重复,没有面向对象思维,继而诞生了很多封装 wrapper 包和 ORM 框架,ORM 是 Python 对象与数据库关系表的一种映射关系,有了 ORM 你不再需要写 SQL 语句。提高了写代码的速度,同时兼容多种数据库系统,如sqlite, mysql、postgresql,付出的代价可能就是性能上的一些损失。如果你对 Django 自带的 ORM 熟悉的话,那么 peewee的学习成本几乎为零。它是 Python 中是最流行的 ORM 框架。

pip install peewee

一个例子

import peewee
from peewee import *

db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy')

class Book(peewee.Model):
  author = peewee.CharField()
  title = peewee.TextField()

  class Meta:
    database = db

Book.create_table()
book = Book(author="me", title='Peewee is cool')
book.save()
for book in Book.filter(author="me"):
  print(book.title)

官方文档:http://docs.peewee-orm.com/en/latest/peewee/installation.html

5、SQLAlchemy

如果想找一种既支持原生 SQL,又支持 ORM 的工具,那么 SQLAlchemy 是最好的选择,它非常接近 Java 中的 Hibernate 框架。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from sqlalchemy_declarative import Address, Base, Person

class Address(Base):
  __tablename__ = 'address'
  id = Column(Integer, primary_key=True)
  street_name = Column(String(250))

engine = create_engine('sqlite:///sqlalchemy_example.db')
Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)
session = DBSession()

# Insert a Person in the person table
new_person = Person(name='new person')
session.add(new_person)
session.commit()

现在差不多搞明白了这几种数据库驱动的优劣,接下来你就可以选择其中的一个进行系统的学习再把它应用到项目中去了,祝你学习开心,不懂的可以咨询我哈。

以上就是Python 连接 MySQL 的几种方法的详细内容,更多关于Python 连接 MySQL 的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Django的信号机制详解
May 05 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
Python数据结构与算法(几种排序)小结
Jun 22 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
python实现的Iou与Giou代码
Jan 18 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
浅析python 动态库m.so.1.0错误问题
May 09 Python
python适合做数据挖掘吗
Jun 16 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 #Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 #Python
Python列表推导式实现代码实例
Sep 09 #Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 #Python
pytorch使用horovod多gpu训练的实现
Sep 09 #Python
python,Java,JavaScript实现indexOf
Sep 09 #Python
python 5个顶级异步框架推荐
Sep 09 #Python
You might like
单点登录 Ucenter示例分析
2013/10/29 PHP
php三维数组去重(示例代码)
2013/11/26 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
Python自动发邮件脚本
2017/03/31 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
python中return如何写
2020/06/18 Python
宝信软件JAVA工程师面试经历
2012/08/19 面试题
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
网站客服岗位职责
2014/04/05 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
2015年端午节活动总结
2015/02/11 职场文书
给领导敬酒词
2015/08/12 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫