python: 数据库

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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值