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 相关文章推荐
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
Python安装Flask环境及简单应用示例
May 03 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
Python读取stdin方法实例
May 24 Python
python,Django实现的淘宝客登录功能示例
Jun 12 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 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类
2006/11/25 PHP
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
python开发之函数定义实例分析
2015/11/12 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
tensorflow 查看梯度方式
2020/02/04 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
劲霸男装广告词改编版
2014/03/21 职场文书
治庸问责工作总结
2015/08/11 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书