设为首页 收藏本站
查看: 1714|回复: 0

[经验分享] 10、Python-数据库支持

[复制链接]

尚未签到

发表于 2015-4-25 10:03:16 | 显示全部楼层 |阅读模式
  使用数据库的好处:
  a、支持数据的并发访问,多个用户同时对基于磁盘的数据进行读写而不造成任何文件的损坏;
  b、支持根据多个数据字段或属性进行复杂的搜索;
  1、如何操作数据库,API
  数据库的种类有很多,并且它们的功能基本都是一样的,为了对数据库进行统一的操作,大多数语言都提供了简单的、标准化的数据库接口(API)。为了易于编写跨数据库的程序,所有数据库的包装模块都应当遵循这个接口。
  2、支持的API函数
  连接数据库connect(),该函数返回连接对象,代表了与要连接的数据库的会话。连接对象支持一下方法:

close() 关闭连接之后,连接对象和它的游标均不可用
commit()如果支持的话提交挂起的事务,否则不做任何事
rollback()回滚挂起的事务
cursor()返回连接的游标对象(通过游标对象执行SQL查询并检查结果,结果行可以一个一个地获得,也可以很多个一起获得)
  
  
  
  
  
  游标对象的方法:

callproc(name[,params])使用给定的名称和参数(可选)调用已命名的数据库程序
close()关闭游标之后,游标不可用
execute(oper[,params])执行SQL参数,可能使用参数
executemany(opr, pseq)对序列中的每个参数执行SQL操作
fetchone()把查询的结果集中的下一行保存为序列,或者None
fetchmany([size])获取查询结果集中的多行,默认尺寸为arraysize
fetchall()以序列的形式获取结果集中的所有行
nextset()跳至下一个可用的结果集(可选)
setinputsizes(sizes)为参数预先定义内存区域
setoutputsize(size[,col])为获取的大数据值设定缓冲区尺寸
  
  
  
  
  
  
  
  
  
  
  游标对象特性:

description结果列描述的系列,只读
rowcount结果中的行数,只读
arraysizefetchmany中返回的行数,默认为1
  
  
  
  3、程序示例
  以SQLite数据库为例,它是小型的嵌入式SQL数据库,它的python包装叫做PYSQLite。它速度快,易于使用,并且不需要建立单独的服务器。
  3.1 创建和填充表



1 import sqlite
2
3 def convert(value):
4     if value.startswith('~'):
5         return value.strip('~')
6     if not value:
7         value = '0'
8     return float(value)
9
10 conn = sqlite.connect('food.db')
11 curs = conn.cursor()
12
13 curs.execute('''
14 CREATE TABLE food (
15   id         TEXT       PRIMARY KEY,
16   desc       TEXT,
17   water      FLOAT,
18   kcal       FLOAT,
19   protein    FLOAT,
20   fat        FLOAT,
21   ash        FLOAT,
22   carbs      FLOAT,
23   fiber      FLOAT,
24   sugar      FLOAT
25 )
26 ''')
27
28 field_count = 10
29 markers = ', '.join(['%s']*field_count)
30 query = 'INSERT INTO food VALUES (%s)' % markers
31
32 for line in open('ABBREV.txt'):
33     fields = line.split('^')
34     vals = [convert(f) for f in fields[:field_count]]
35 curs.execute(query, vals)
36
37 conn.commit()
38 conn.close()
  3.2 搜索和处理结果



1 import sqlite, sys
2
3 conn = sqlite.connect('food.db')
4 curs = conn.cursor()
5
6 query = 'SELECT * FROM food WHERE %s' % sys.argv[1]
7 print query
8 curs.execute(query)
9 names = [f[0] for f in curs.description]
10 for row incurs.fetchall():
11     for pair in zip(names, row):
12         print '%s: %s' % pair
13     print
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60471-1-1.html 上篇帖子: 感知机(python实现) 下篇帖子: python 贪婪和非贪婪、多行匹配正则表达式小结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表