驱动选择
分C实现的驱动和python实现的驱动,前者实现复杂但是性能好,后者实现简单性能稍微比C的差一点(一般基本无碍)。
选择
1
1.我们使用数据库的时候,想清楚自己要那种驱动,然后去寻找自己合适的驱动框架。
2
eg:
3
# mysql驱动框架
4
mysqldb、pymysql、mysqlconnector、oursql
5
# postgreSQl驱动框架
6
psycopg2、pg8000
7
# Oracle驱动框架
8
cx_oracle
9
# MSSQL驱动框架
10
pyodbc、pymssql
框架选择
分纯sql实现操作的框架和ORM的关系对象映射框架,前者对操作者要求高一点性能也好,后者因为映射关系所以需要损失一些性能。
选择
1
我们需要了解自己做的是什么业务,适合什么框架。
2
比如:
3
1.web服务,我们可能一般喜欢带ORM的框架,即便损失一点点性能也没有关系,不追求极致。
4
2.追求极致性能(也就是说肯定不是ORM,也不是python写的驱动框架),这时候我们就得找MySQLdb这种框架
框架类型
大多数ORM框架都实现了自个管理连接,所以一般不需要自己实现连接池。
MySQLdb
mysql官方用C语言写的MySQLdb(性能最好,但是只支持python2.x版本,不过后来出现了fork版本的mysqlclient,完全兼容 MySQLdb,同时支持 Python3.x),追求极致性能,建议使用mysqlclient,一般会配合数据库连接池配套使用(比如:DBUtils),也可自己实现连接池管理。是很多ORM框架的依赖工具(比如Django ORM、Flask-SQLAlchemy等)
1
pip install mysqlclient
2
'''
3
安装失败的话可取官网下载源码
4
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
5
'''
6
# 源码安装(需要找对应平台的包)
7
pip install mysqlclient-1.3.12-cp36-cp36m-win_amd64.whl
8
9
# 失败可能性是没安装对应的环境
10
# 注意,如果是python3的话,python-devel改为python3-devel
11
yum install mysql-devel gcc gcc-devel python-devel
12
13
# 可能每个源对应的名字不同,最好安装前搜索一下
14
yun search python |grep devel
pymysql
python写的主流连接库,纯python实现的驱动,速度上比不上 MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容 MySQL-python
- 安装
1
pip install pymysql
- 简单用例
1
import pymysql
2
# 为了兼容mysqldb,只需要加入
3
pymysql.install_as_MySQLdb()
4
conn = pymysql.connect(host='127.0.0.1', user='root', passwd="xxx", db='mysql')
5
cur = conn.cursor()
6
cur.execute("SELECT * FROM user")
7
for r in cur:
8
print(r)
9
cur.close()
10
conn.close()
- 安装
mysql-connector-python
mysql官方推出的纯python实现的连接库,想使用ORM,建议使用mysql connector for python
1
pip install mysql-connector-python
SQLAlchemy
一个ORM框架,它并不提供底层的数据库操作,而是要借助于MySQLdb、PyMySQL等第三方库来完成,目前SQLAlchemy在Web编程领域应用广泛。SQLAlchemy 自身提供了连接池来管理所有和 database 的连接,pacakge 是 sqlalchemy.pool ,简单来说 connection pool 就是一种复用连接的机制
优点
既支持原生 SQL,又支持 ORM 的工具
简单使用
如果需要实现线程安全的话,配套scoped_session即可(配套scoped_session一般多用于web),如果是使用Flask编写的话,一般建议用Flask-SQLAlchemy,因为它自动帮你管理了这些事。
1
from sqlalchemy import create_engine
2
from sqlalchemy.orm import sessionmaker
3
4
from sqlalchemy_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
# 连接地址写法:dialect[+driver]://user:password@host/dbname[?key=value..]
12
# sqlite的有点特殊,需要三个/
13
engine = create_engine('sqlite:///sqlalchemy_example.db')
14
Base.metadata.bind = engine
15
16
DBSession = sessionmaker(bind=engine)
17
session = DBSession()
18
19
# Insert a Person in the person table
20
new_person = Person(name='new person')
21
session.add(new_person)
22
session.commit()
Flask-SQLAlchemy
Flask框架下的扩展插件库,可以理解为专门配套给Flask应用使用的,Flaks-web开发者基本不用关心session的管理操作。
peewee
Python中是最流行的ORM框架,兼容多种数据库系统(如:sqlite, mysql、postgresql)
- 安装
1
pip install peewee
- 简单使用
1
import peewee
2
from peewee 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
for book in Book.filter(author="me"):
17
print(book.title)
- 安装