用 Python 连接 MySQL 的几种方式详解


Posted in Python onApril 04, 2018

尽管很多 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 文件安装,公众号回复「win」获取下载链接

#!/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 相关文章推荐
一些Python中的二维数组的操作方法
May 02 Python
python+tkinter编写电脑桌面放大镜程序实例代码
Jan 16 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
Python对多属性的重复数据去重实例
Apr 18 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
使用python进行波形及频谱绘制的方法
Jun 17 Python
python使用递归的方式建立二叉树
Jul 03 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
python logging模块的使用详解
Oct 23 Python
python实现简单石头剪刀布游戏
Oct 24 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 #Python
对numpy中数组元素的统一赋值实例
Apr 04 #Python
Python 元类实例解析
Apr 04 #Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 #Python
Numpy数组的保存与读取方法
Apr 04 #Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 #Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 #Python
You might like
PHP生成不重复标识符的方法
2014/11/21 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
django项目搭建与Session使用详解
2018/10/10 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
django序列化serializers过程解析
2019/12/14 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
Python气泡提示与标签的实现
2020/04/01 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
2014年党员自我剖析材料
2014/10/07 职场文书
网吧温馨提示
2015/07/17 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
python数字转对应中文的方法总结
2021/08/02 Python
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android