尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,本篇文章介绍 Python 操作 MySQL 的几种方式,你可以在实际开发过程中根据实际情况合理选择。01
mysqlclient
目前有两种主流的安装方式,其中一种方式可以在网站找到对应的whl包下载安装。https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
在cmd命令行中进入安装文件所在路径运行命令:
# Windows安装pip install mysqlclient 1.4.4 cp37 cp37m win_amd64.whl
另外一种方式是直接调用cmd命令:
# Windows安装pip install mysqlclient
python 操作mysql数据库基础
import MySQLdbdb = MySQLdb.connect( host="localhost", # 主机名 user="root", # 用户名 passwd="password", # 密码 db="db") # 数据库名称# 查询前,必须先获取游标cursor = db.cursor()# 执行的都是原生SQL语句cursor.execute("SELECT * FROM TABLE_NAME")for row in cursor.fetchall(): print(row[0])
02
PyMySQL
PyMySQL 是纯 Python 实现的驱动,速度上比不上MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容 MySQL-python。
pip install PyMySQL# 为了兼容mysqldb,只需要加入pymysql.install_as_MySQLdb()
pip install PyMySQL
# 为了兼容mysqldb,只需要加入
pymysql.install_as_MySQLdb()
import pymysqlconn = pymysql.connect( host="localhost", # 主机名 user="root", # 用户名 passwd="password", # 密码 db="db") # 数据库名称# 查询前,必须先获取游标cursor = conn.cursor()# 执行的都是原生SQL语句cursor.execute("SELECT * FROM TABLE_NAME")data = cursor.fetchone()cursor.close()conn.close()
import pymysql
conn = pymysql.connect(
host="localhost", # 主机名
user="root", # 用户名
passwd="password", # 密码
db="db") # 数据库名称
# 查询前,必须先获取游标
cursor = conn.cursor()
# 执行的都是原生SQL语句
cursor.execute("SELECT * FROM TABLE_NAME")
data = cursor.fetchone()
cursor.close()
conn.close()
03
peewee
写原生 SQL 的过程非常繁琐,代码重复,没有面向对象思维,继而诞生了很多封装 wrapper 包和 ORM 框架,ORM 是 Python 对象与数据库关系表的一种映射关系,有了 ORM 你不再需要写 SQL 语句。
提高了写代码的速度,同时兼容多种数据库系统,如sqlite, mysql、postgresql,付出的代价可能就是性能上的一些损失。
如果你对 Django 自带的 ORM 熟悉的话,那么 peewee的学习成本几乎为零。
它是 Python 中是最流行的 ORM 框架。
pip install peewee
pip install peewee
import peeweedb = peewee. MySQLDatabase ( host="localhost", # 主机名 user="root", # 用户名 passwd="password", # 密码 database="db") # 数据库名称# 定义一个类继承peewee.Model创建表,一个类就是一个表class School(peewee.Model): # 定义两个字段,学校名称和地址 name = peewee.CharField() address = peewee.CharField()# 将表和数据库连接 class Meta: database = dbif __name__ == '__main__': # 创建表,多个表用列表 School.create_table()
04
SQLAlchemy
如果想找一种既支持原生 SQL,又支持 ORM 的工具,那么 SQLAlchemy 是最好的选择,它非常接近 Java 中的 Hibernate 框架。
首先需要安装mysql模块:进入cmd命令行,执行
pip install mysql
其次才可安装sqlalchemy:进入cmd命令行,执行
pip install SQLAlchemy
from sqlalchemy import create_engine# 得到连接对象 # 参数:mysql+pymysql://用户名:密码@地址/数据库名conn = create_engine("mysql+pymysql://root:password@localhost/db")# 查询resselect = conn.execute("SELECT * FROM TABLE_NAME")# 输出列表数据 print(resselect.fetchall())# 插入,输出影响行数resinsert=conn.execute("insert into TABLE_NAME(namex,sex) values('%s','%s')"%("苏子涵","F")).rowcount print(resinsert)
现在差不多搞明白了这几种数据库驱动的优劣,接下来你就可以选择其中的一个进行系统的学习再把它应用到项目中去了