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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
理解Python中的类与实例
Apr 27 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
python中返回矩阵的行列方法
Apr 04 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
python实现图片文件批量重命名
Mar 23 Python
全面了解django的缓存机制及使用方法
Jul 22 Python
Python 通过截图匹配原图中的位置(opencv)实例
Aug 27 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
Python3爬虫mitmproxy的安装步骤
Jul 29 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 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 UBB 解析实现代码
2011/11/27 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
动态创建类实例代码
2009/10/07 Python
python 中的列表解析和生成表达式
2011/03/10 Python
用Python创建声明性迷你语言的教程
2015/04/13 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
python 换位密码算法的实例详解
2017/07/19 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Python中psutil的介绍与用法
2019/05/02 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
办公室前台岗位职责
2014/01/04 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
奖学金感谢信
2015/01/21 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
教师节表彰会主持词
2015/07/06 职场文书
老乡会致辞
2015/07/28 职场文书