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规范:
数据库的API都是通过connect函数建立连接返回Connection对象:
connect(user, password, host, port,database/db):
connect(“dbname, user,password, host, port”)
通过connect连接的对象的属性:
close() :关闭数据库连接
commit() :提交当前事物
rollback() :取消当前事物
cursor() :使用这个连接创建并返回一个游标或类游标的对象
errorhandler(cxn, cur,errcls, errval) :作为已给游标的句柄
游标对象的属性:
arraysize
connection
description
lastrowid
rowcount
callproc(func[, args]):调用一个存储过程
close():关闭游标对象
execute(op[, args]):执行一个数据库查询/命令
executemany(op[, args]):为给定的每个参数准备并执行一个数据库查询/命令
fetchone():得到结果集的下一行
fetchmany([size=cursor.arraysize]):得到结果集的下几行
fetchall():返回结果集中剩下的所有行
__iter__()
messages
next()
nextset()
rownumber
setinputsizes(sizes)
setoutputsize(size[, col])
#####################################################################
sqlite3
#####################################################################
使用sqlite不用安装,调用sqlite3的connect函数自动生成文件。
import sqlite3
cxn =sqlite3.connect(r’C:\temp\test’)
cur = cxn.cursoe()
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
import psycopg2
cxn =
psycopg2.connect([database="postgres",]user="postgres",password=“*”)
cur = cxn.cursor()
cur.execute(‘SELECT * FROMpg_database’)
rows = cur.fetchall()
for i in rows:
print i
cur.close()
cxn.commit()
cxn.close()
#####################################################################
mysql
#####################################################################
需要安装mysql数据库,同时安装python的API,MySQLdb,也叫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()
#####################################################################