sqlite:基于文件的关系数据库,已经包含在python标准库中。
gadfly:用python写的基于文件的关系数据库
mysql:基于服务器的关系数据库
postgresql:基于服务器的关系数据库
python访问数据库的两种方式:
1. ORM
2. DB-API
###################################################################
ORM:对象-关系管理器,如果不希望直接嵌入sql可以使用ORM。
ORM模块:
1. SQLAlchemy
2. SQLObject
#####################################################################
DB-API规范:通过嵌入sql来访问数据库。
所有数据库的python接口都要遵循DB-API规范:
Connection类:
connect():通过connect函数建立连接,返回一个Connection对象:
不同的模块connect函数的格式有所不同。
Connection对象的属性和方法:
close() :关闭数据库连接
commit() :提交当前事物
rollback() :取消当前事物
cursor() :使用这个连接创建并返回一个游标或类游标的Cursor对象
create_aggregate
create_collation
create_function
enable_load_extension
interrupt
isolation_level
iterdump
load_extension
row_factory
set_authorizer
set_progress_handler
text_factory
total_changes
execute
executemany
executescript
Cursor游标对象的属性和方法:
arraysize
connection
description
lastrowid
rowcount
row_factory
callproc(func[, args]):调用一个存储过程
close():关闭游标对象
execute(op[, args]):执行一个数据库查询/命令
executemany(op[, args]):为给定的每个参数准备并执行一个数据库查询/命令
executescript(op[, args]):执行一个混合sql语句。
fetchone():得到结果集的下一行
fetchmany([size=cursor.arraysize]):得到结果集的下几行
fetchall():返回结果集中剩下的所有行
__iter__()
next()
nextset()
setinputsizes(sizes)
setoutputsize(size[, col])
高级异常类Error的子类
InterfaceError:与数据库界面相关的错误
DatabaseError:与数据库本身相关的错误
DataError:与处理的数据相关的错误
OperationalError:与数据库本身的运行相关的错误
IntegrityError:当数据库的关系完整性被破坏时出现的错误
InternalError:数据库内部错误
ProgramingError:SQL查询中的错误
NotSupportedError:不受底层数据库支持的数据库API方法导致的错误
threadsafety属性:
各个数据库API模块都定义了这个属性用来说明线程安全性的整数。
#####################################################################
sqlite3
#####################################################################
使用sqlite不用安装,调用sqlite3的connect函数自动生成文件。
import sqlite3
cxn =sqlite3.connect(r’C:\temp\test’)
cur = cxn.cursor()
cur.execute(‘CREATE TABLEtest(var1 VARCHAR(10), var2 INTEGER)’)
cur.execute(‘INSERT INTOtestable VALUES(“canux”, 1)’)
cur.execute(‘SELECT * FROM testable’)
for each in cur.fetchall():
print each
cur.close()
cxn.commit()
cxn.close()
#####################################################################
postgresql
#####################################################################
需要安装postgresql数据库,同时要安装python的API,有三个可用接口:
1. psycopg2
2. PyPgSQL
3. PyGreSQL
sudo apt-get install python-psycopg2
sudo pip install psycopg2
import psycopg2
cxn = psycopg2.connect([database="postgres",]user="postgres",password=“*”)
cur = cxn.cursor()
cur.execute(‘SELECT * FROM pg_database’)
rows = cur.fetchall()
for i in rows:
print i
cur.close()
cxn.commit()
cxn.close()
#####################################################################
mysql
#####################################################################
需要安装mysql数据库,同时安装python的API,MySQLdb,也叫MySQL-python。
sudo apt-get install python-mysqldb
sudo pip install MySQL-python
mysql的msqldb的connect有query属性。
import MySQLdb
cxn = MySQLdb.connect([db=‘mysql‘,]user=’root’,passwd=’*’)
cxn.query(‘CREATE DATABASEdatabasename’)
cxn.query(“GRANT ALL ONdatabasename.* to ‘’@’localhost’”)
…
cxn.commit()
cxn.close()
使用cursor:
cxn = MySQLdb.connect([db=‘mysql‘,]user=’root’,passwd=’*’)
cur = cxn.cursor()
cur.execute(‘CREATE TABLEtablename(var1 VARCHAR(8), var2 INT)’)
cur.execute(“INSERT INTOtablename VALUES(‘canux’, 1)”)
cur.execute(“SELECT * FROMtablename”)
for data in cur.fetchall():
print ‘%s\t%s’ % data
cur.execute(‘UPDATE tablenameSET val2=2 WHERE var1=”canux”’)
cur.execute(‘DELETE FROMtablename WHERE var1=”canux”’)
cur.execute(‘DROP TABLEtablename’)
cur.close()
cxn.commit()
cxn.close()