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进程管理工具supervisor使用实例
Sep 17 Python
Python模块搜索概念介绍及模块安装方法介绍
Jun 03 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
python pytest进阶之fixture详解
Jun 27 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
python3的pip路径在哪
Jun 23 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 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批量生成缩略图的代码
2008/07/19 PHP
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Django中处理出错页面的方法
2015/07/15 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
python中实现字符串翻转的方法
2018/07/11 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
户外宣传策划方案
2014/05/25 职场文书
工程负责人任命书
2014/06/06 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
如何书写授权委托书?
2019/06/25 职场文书