不管你是做数据分析,还是网络爬虫,Web开发,亦或者机器学习,你都离不开要和数据库打交道,而MySQL又是最流行的一种数据库,介绍文章介绍Python操作MySQL的5种方式,您可以在实际开发过程中根据实际情况合理选择。
1,MySQLdb
MySQLdb又叫MySQL-python,是Python连接MySQL最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持Python2.x,而且安装的时候有很多附带条件,因为它是基于C开发的库,在Windows平台安装非常不友好,经常出现故障的情况,现在基本不推荐使用,取代的是它的衍生版本。
sudo apt-get install python-dev libmysqlclient-dev # Ubuntu<font></font>
sudo yum install python-devel mysql-devel # Red Hat / CentOS<font></font>
# 安装<font></font>
pip install MySQL-python<font></font>
Windows 直接通过下载 exe 文件安装
import MySQLdb<font></font>
db = MySQLdb.connect(<font></font>
host="localhost", # 主机名<font></font>
user="root", # 用户名<font></font>
passwd="pythontab.com", # 密码<font></font>
db="testdb") # 数据库名称<font></font>
# 查询前,必须先获取游标<font></font>
cur = db.cursor()<font></font>
# 执行的都是原生SQL语句<font></font>
cur.execute("SELECT * FROM mytable")<font></font>
for row in cur.fetchall():<font></font>
print(row[0])<font></font>
db.close()
2,mysqlclient
由于MySQL-python(MySQLdb)年久失修,后来出现了它的Fork版本mysqlclient,完全兼容MySQLdb,同时支持Python3.x,是Django ORM的依赖工具,如果您想使用原生SQL来操作数据库,那么推荐此驱动。安装方式和MySQLdb是一样的,Windows可以在https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient网站找到对应版本的whl包下载安装。
pip install some-package.whl
sudo apt-get install python3-dev # debian / Ubuntu<font></font>
sudo yum install python3-devel # Red Hat / CentOS<font></font>
brew install mysql-connector-c # macOS (Homebrew)<font></font>
pip install mysqlclient
3,PyMySQL
PyMySQL是纯Python实现的驱动,速度上比不上MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容MySQL-python
# 为了兼容mysqldb,只需要加入<font></font>
pymysql.install_as_MySQLdb()
例子
conn = pymysql.connect(host='127.0.0.1', user='root', passwd="pythontab.com", db='testdb')<font></font>
cur = conn.cursor()<font></font>
cur.execute("SELECT Host,User FROM user")<font></font>
for r in cur:<font></font>
print(r)<font></font>
cur.close()<font></font>
conn.close()
4,皮皮
写原生SQL的过程非常繁琐,代码重复,没有面向对象思维,继而诞生了很多封装wrapper包和ORM框架,ORM是Python对象与数据库关系表的一种映射关系,有了ORM你不再需要写SQL语句。提高了写代码的速度,同时兼容多个数据库系统,如sqlite,mysql,postgresql,付出的代价可能就是性能上的一些损失。如果你对Django自带的ORM熟悉的话,那么peewee的学习成本几乎是零。它是Python中是最流行的ORM框架。
安装
例子
from peewee import *<font></font>
db = MySQLDatabase('testdb', user='root', passwd='pythontab.com')<font></font>
class Book(peewee.Model):<font></font>
author = peewee.CharField()<font></font>
title = peewee.TextField()<font></font>
class Meta:<font></font>
database = db<font></font>
Book.create_table()<font></font>
book = Book(author="pythontab", title='pythontab is good website')<font></font>
book.save()<font></font>
for book in Book.filter(author="pythontab"):<font></font>
print(book.title)
5,SQL炼金术
如果想找一种既支持原生SQL,又支持ORM的工具,那么SQLAlchemy是最好的选择,它非常接近Java中的Hibernate框架。
from sqlalchemy.orm import sessionmaker<font></font>
from sqlalchemy_declarative import Address, Base, Person<font></font>
class Address(Base):<font></font>
__tablename__ = 'address'<font></font>
id = Column(Integer, primary_key=True)<font></font>
street_name = Column(String(250))<font></font>
engine = create_engine('sqlite:///sqlalchemy_example.db')<font></font>
Base.metadata.bind = engine<font></font>
DBSession = sessionmaker(bind=engine)<font></font>
session = DBSession()<font></font>
# Insert a Person in the person table<font></font>
new_person = Person(name='new person')<font></font>
session.add(new_person)<font></font>
session.commit()
现在差不多搞明白了这几种数据库驱动的优劣,接下来你就可以选择其中的一个进行系统的学习再把它应用到项目中去了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。