1、介绍
持久存储:文件、关系型数据库、其他一些变种。
基于常规文件的Python和DBM接口来实现持久存储,比如*dnm,dbhas/bsddb文件,helve(pickle和DBM的结合)。这些接口都提供了类似字典的对象接口。
数据库底层存储:普通操作系统文件,专用操作系统文件,也可是磁盘分区。
2、Python数据库应用程序 程序员接口(DB-API)
(1)DB-API 2.0
DB-API是一个规范,它定义了一系列必需的对象和数据库存储方式,以便为各种各样的底层数据库和多种多样的数据库接口程序提供一致的访问接口。
一个DB-API兼容的模块必须定义如下:
- apilevel:模块兼容的DB-API版本号
- threadsafety:线程安全级别
- paramstyle:该模块支持的SQL语句参数风格
- connect():连接函数
- (异常)
(2)MySQL接口程序
MySQL的接口程序MySQLdb,又名MySQL-Python。
>>>import MySQLdb
>>>cxn=MySQLdb.connect(user='root')
>>>cxn.query("CREATE DATABASE test")
>>>cxn=MySQLdb.connect(db='test')
>>>cur=cxn.cursor() #游标对象
>>>cur.execute('CREATE TABLE users(login Int)')
(3)PostgreSQL接口程序
有至少3个接口程序可以访问PostgreSQL:psycopg、PyPgSQL和PyGreSQL。另外PoPy现在已经废弃。
①psycopg
>>>import psycopg
>>>cxn=psycopg.connect(user='pgsql')
②PyPgSQL
>>>from pyPgSQL import PgSQL
>>>cxn=PgSQL.connect(user='pgsql')
③PyGreSQL
>>>import pgdb
>>>cxn=pgdb.connect(user='pgsql')
(4)通用代码
下面的代码就能够在所有接口程序下工作:
>>>cur=cxn.cursor()
>>>cur.execute('SELECT * FROM pg_database')
>>>rows=cur.fetchall()
>>>for i in rows:
print i
>>>cur.close()
>>>cxn.commit()
>>>cxn.close()
(5)SQLite
pysqlite数据库接口程序,Python2.5中已集成,作为Python2.5的sqlite3模块。
SQLite足够简单,使用文件(或内存)作为后端存储,就像DBM模块做的那样,不需要服务器,也不存在授权问题。
(6)Gadfly
基本兼容SQL的纯Python写成的关系数据库。Gadfly目前版本还不兼容DB-API 2.0。
3、ORM(对象关系管理器)
将SQL表转换为Python类。
Python ORM中最知名的模块是SQLAlchemy和SQLObject。其它的包括:PyDO/PyDO2、PDO、Dejavu、Durus、QLime和ForgetSQL。