尽管很多NoSQL数据库近几年大放异彩,但是像MySQL这样的关系型数据库依然是互联网的主流数据库之一,每个学Python的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web开发、亦或是机器学习,你都离不开要和数据库打交道,而MySQL又是最流行的一种数据库,这篇文章介绍Python操作MySQL的几种方式,你可以在实际开发过程中根据实际情况合理选择。
1、MySQL-python
MySQL-python又叫MySQLdb,是Python连接MySQL最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持Python2.x,而且安装的时候有很多前置条件,因为它是基于C开发的库,在Windows平台安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代的是它的衍生版本。
1.#前置条件
2.sudo apt-get install python-dev libmysqlclient-dev # Ubuntu
3.sudo yum install python-devel mysql-devel # Red Hat / CentOS
4.
5.#安装
6.pip install MySQL-python
Windows直接通过下载exe文件安装,公众号回复「win」获取下载链接
1.#!/usr/bin/python
2.import MySQLdb
3.
4.db = MySQLdb.connect(
5.host="localhost", #主机名
6.user="john", #用户名
7.passwd="megajonhy", #密码
8.db="jonhydb") #数据库名称
9.
10.#查询前,必须先获取游标
11.cur = db.cursor()
12.
13.#执行的都是原生SQL语句
14.cur.execute("SELECT * FROM YOUR_TABLE_NAME")
15.
16.forrowincur.fetchall():
17.print(row[0])
18.
19.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包下载安装。
1.# Windows安装
2.pip installsome-package.whl
3.
4.# linux前置条件
5.sudo apt-get install python3-dev # debian / Ubuntu
6.sudo yum install python3-devel # Red Hat / CentOS
7.brew install mysql-connector-c # macOS (Homebrew)
8.
9.pip install mysqlclient
3、PyMySQL
PyMySQL是纯Python实现的驱动,速度上比不上MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容MySQL-python
1.pip install PyMySQL
2.#为了兼容mysqldb,只需要加入
3.pymysql.install_as_MySQLdb()
一个例子
1.import pymysql
2.conn = pymysql.connect(host='127.0.0.1',user='root', passwd="xxx", db='mysql')
3.cur = conn.cursor()
4.cur.execute("SELECT Host,User FROM user")
5.forrincur:
6.print(r)
7.cur.close()
8.conn.close()
4、peewee
写原生SQL的过程非常繁琐,代码重复,没有面向对象思维,继而诞生了很多封装wrapper包和ORM框架,ORM是Python对象与数据库关系表的一种映射关系,有了ORM你不再需要写SQL语句。提高了写代码的速度,同时兼容多种数据库系统,如sqlite, mysql、postgresql,付出的代价可能就是性能上的一些损失。如果你对Django自带的ORM熟悉的话,那么peewee的学习成本几乎为零。它是Python中是最流行的ORM框架。
1.pip install peewee
一个例子
1.import peewee
2.frompeewee import *
3.
4.db = MySQLDatabase('jonhydb',user='john', passwd='megajonhy')
5.
6.class Book(peewee.Model):
7.author = peewee.CharField()
8.title = peewee.TextField()
9.
10.class Meta:
11.database= db
12.
13.Book.create_table()
14.book = Book(author="me", title='Peewee is cool')
15.book.save()
16.forbookinBook.filter(author="me"):
17.print(book.title)
官方文档:http://docs.peewee-orm.com/en/latest/peewee/installation.html
5、SQLAlchemy
如果想找一种既支持原生SQL,又支持ORM的工具,那么SQLAlchemy是最好的选择,它非常接近Java中的Hibernate框架。
1.fromsqlalchemy import create_engine
2.fromsqlalchemy.orm import sessionmaker
3.
4.fromsqlalchemy_declarative import Address, Base, Person
5.
6.class Address(Base):
7.__tablename__ ='address'
8.id =Column(Integer, primary_key=True)
9.street_name =Column(String(250))
10.
11.engine = create_engine('sqlite:///sqlalchemy_example.db')
12.Base.metadata.bind = engine
13.
14.DBSession = sessionmaker(bind=engine)
15.session = DBSession()
16.
17.#Inserta Personinthe persontable
18.new_person = Person(name='new person')
19.session.add(new_person)
20.session.commit()
现在差不多搞明白了这几种数据库驱动的优劣,接下来你就可以选择其中的一个进行系统的学习再把它应用到项目中去了