王朝网络
分享
 
 
 

让 Python 与 DB 共舞 - 谈 DB-API 模组

王朝other·作者佚名  2006-11-24
宽屏版  字体: |||超大  

使用 Python 的同好们应该知道 python 有许多不同的 module,光 mysql 的 module 就有三四个以上。 每个使用的介面都不太相同。这问题常会困扰著初学者,不知道要学那一样。大家没注意过 Python SIGs(Special Interest Groups)有一个 group 称为 db-sig,由对 python database部分有兴趣的朋友组成。他们定义了一组称为 DB-API 的介面,现在已经推出2.0 版了。我并不是说这个 API 会有多好,不过它定出一个各 database module可以依循的介面,让 Python 的爱用者不需要再为学习或使用那一个 module 好而烦恼。(我最怕用了某个没人维护的 module,那将来该怎么辨? 重写?)

闲话少说,我要介绍的就是 DB-API。目前我所使用的 DB 为 PostgreSQL 7,目常最新的版本。使用的 module 为 PyGreSQL-3.0,tarball 有些问题的版本,小修一下,似乎没什么问题。目前 FreeBSD 的 ports 只做到 2.4 版,3.0 版的ports 我随手做了一下,拿 2.4 的来小改。

ftp://www.branda.to/pub/py-PyGreSQL3.tar.gz

关于 Linux 部分,请使用 tarball 自行处理。

以 PyGreSQL-3.0 为例,DB-API 使用如下:

1 import pgdb

2

3 conn = pgdb.connect=(host='xxxx', database='template1', user='xxx', passwor

4 cursor = conn.cursor()

5 qstr = 'select * from pg_table;'

6 cursor.execute(qstr)

7 print 'row #.=>', cursor.rowcount

8 print 'one row =>', cursor.fetch()

9 print 'three row =>', cursor.fetchmany(3)

10 print 'all row =>', cursor.fetchall()

11 cursor.close()

12 conn.close()

--------------------

row #.=> 28

one row => ['pg_type', 'pgsql', 't', 'f', 'f']

three row => [['pg_type', 'pgsql', 't', 'f', 'f'], ['pg_attribute', 'pgsql', 't, 'f', 'f'], ['pg_proc', 'pgsql', 't', 'f', 'f']]

all row => [['pg_type', 'pgsql', 't', 'f', 'f'], ['pg_attribute', 'pgsql', 't','f', 'f'], ['pg_proc', 'pgsql', 't', 'f', 'f'], ['pg_class', 'pgsql', 't',

...... skip ............

['pg_ipl', 'pgsql', 'f', 'f', 'f'], ['pg_inheritproc', 'pgsql', 'f', 'f','f']]

行 1,先 import pgdb。这个基本知识就不用多说了。

行 3,先建设一个 database connection,database 参数为 database 名称。

行 4,产生一个 cursor object,cursor 为实际接受 SQL command 的 object,的执行结果。

行 6,使用刚才产生的 cursor object 执行 SQL command 'select * from pg_tables;',pg_table 为 PostgreSQL 的 system table,你可下任何其它的 SQL command。

行 7,则显示 SQL command 所产生的资料的 row 数目,为 28 rows。

行 8,展示 fetchone() 这个 method 的功能,fetchone 会读取执行结果的第一个 row。

行 9,展示 fetchmany(),这个 method 可以读取执行结果的头 n 个 row。

行 10,fetchall() 读回所有的结果。

从上例我们可以看到 DB-API 的介面定义的很简单,fetchxxx() 所取得的结为list of list,除了 fetchone() 为单一个 list。除了上面所展示的功能之外,DB-API 还包含了 transation 的介面,commit(),rollback()。commit() 为cursor 的 method,会将这次 commit 之前,前次 commit 之后的所有 SQLcommand 进行 commit。而 rollback() 也是 cursor 的 method,用来 aborttransation,使 database 回到本次 transation 执行之前的状况。关于transation 我就不多做说明了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有