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 相关文章推荐
Python 类与元类的深度挖掘 II【经验】
May 06 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
python类的继承实例详解
Mar 30 Python
Python解惑之整数比较详解
Apr 24 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
Python日志无延迟实时写入的示例
Jul 11 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
Matplotlib绘制混淆矩阵的实现
May 27 Python
全网非常详细的pytest配置文件
Jul 15 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
php获取当月最后一天函数分享
2015/02/02 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
python选择排序算法的实现代码
2013/11/21 Python
python实现百度关键词排名查询
2014/03/30 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
python面向对象 反射原理解析
2019/08/12 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
python实现AdaBoost算法的示例
2020/10/03 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
如何提高MySql的安全性
2014/06/19 面试题
企业演讲比赛主持词
2014/03/18 职场文书
党员承诺书范文
2014/05/19 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书