python基础教程总结12——数据库
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python基础教程总结12——数据库,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6754字,纯文字阅读大概需要10分钟。
内容图文
![python基础教程总结12——数据库](/upload/InfoBanner/zyjiaocheng/453/90322491b8fc4e28b6e8cb3524eaff5a.jpg)
1.3 连接和游标
使用 connect
函数连接到数据库,该函数有多个参数,具体使用方法取决于对应的数据库。下面是具体的参数含义(使用时推荐使用关键字参数的方式):
================================================== 参数名 描述 ================================================== dsn 数据库源名称,给出参数表示数据库依赖(必选) user 用户名(可选) passowrd 密码(可选) host 主机名(可选) database 数据库名(可选)
函数返回连接对象,该对象表示目前和数据库的会话,对象支持的方法如下:
============================================================= 方法名 描述 ============================================================= close() 关闭连接之后,连接对象和它的游标均不可用 commit() 如果支持的话就提交挂起事务,否则不可用 rollback() 回滚挂起的事务 cursor() 返回连接的游标对象
rollback
方法如果使用的数据库支持的话,就会撤销所有未提交的事务。而 cursor
方法则返回一个游标对象,可以通过游标执行SQL查询并检查结果。游标比连接支持更多方法,也更加易用,下面是游标方法的概述:
==================================================================================== 名称 描述 ==================================================================================== callproc(name[, params]) 使用给定的名称和参数(可选)调用以命名的数据库程序 close() 关闭游标后,游标不可用 execute(oper[, params]) 执行SQL操作,可选的参数 executemany(oper, pseq) 对序列中的每个参数执行SQL操作 fetchone() 把查询结果集中的下一行保存为序列或者None fetchmany([size]) 获取查询的结果集中的多行,默认尺寸为arraysize fetchall() 将所有(剩余)的行作为序列的序列 nextset() 跳至下一个可用的结果集(可选) setinputsizes(sizes) 为参数预先定义的内存区域 setoutputsize(size[, col]) 为获取的大数据库值设定缓冲区尺寸
游标对象还包含一些特性:
================================================== 名称 描述 ================================================== description 结果列描述的序列,只读 rowcount 结果中的行数,只读 arraysize fetchmany中返回的行数,默认为1
1.4 类型
DB API 定义了Python中的类型和数据库类型的对应关系。通过特殊的类型和值的构造函数以及常量(单例模式),如下(一些模块可能并不是完全按照这些定义):
================================================== 名称 描述 ================================================== Date(year, month, day) 创建保存日期值的对象 Time(hour, minute, second) 创建保存时间值的对象 Timestamp(y, mon, d, h, min, s) 创建保存时间戳的对象 DateFromTicks(ticks) 创建保存自新纪元以来的秒数的对象 TimeFromTicks(ticks) 创建保存来自秒数的时间值的对象 TimestampFromTicks(ticks) 创建保存来自秒数的时间戳值的对象 Binary(string) 创建保存二进制字符串值的对象 STRING 描述二进制列(比如LONG或RAW) BINARY 描述数字列 MUMBER 描述数字列 DATETIME 描述日期/时间列 ROWID 描述行ID列
2. SQLite 和PySQLite
SQLite是一个小型的数据库引擎,它不基于集中式数据库存储机制,而是直接作用于本地文件。在Python 2.5 之后,SQLite 的包装(PySQLite)已经被包含在标准库中了(在最新的Python版本中已经包含了SQLite数据库了,并不需要单独安装)。
2.1 简单示例
将SQLite作为名为sqlite3的模块导入,即可创建一个数据库文件(不存在则创建,可指定路径),并连接到数据库,下面是一个简单的示例:
1 # -- coding:utf-8 -- 2 import sqlite3 3 4 conn = sqlite3.connect(‘myDatabase.db‘) 5 curs = conn.cursor() # 获得游标 6 conn.commit() # 提交更改 7 conn.close() # 关闭连接
2.2 创建和填充表
通过下面的示例来学习如果创建和向表中插入数据,在这里使用的数据库是基于USDA营养数据库实验室提供的文本格式的数据库,在这里使用的文件地址是:http://sr23-nutrient-calculator.googlecode.com/svn-history/r9/trunk/ABBREV.txt,示例如下:
1 import sqlite3 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 = sqlite3.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 query = r‘INSERT INTO food VALUES(?,?,?,?,?,?,?,?,?,?)‘ 29 30 for line in open(‘ABBREV.txt‘): 31 fields = line.split(‘^‘) 32 vals = [convert(f) for f in fields[0:10]] 33 curs.execute(query,vals) 34 35 conn.commit() 36 conn.close()
2.3 搜索和处理结果
查询数据库内容只需要创建连接,并获得该连接的游标即可,通过 execute
方法执行SQL查询,使用 fetchall
等方法提取结果,如下所示:
1 # food_query.py 2 import sqlite3,sys 3 4 conn = sqlite3.connect(‘food.db‘) 5 curs = conn.cursor() 6 7 query = ‘select * from food WHERE %s‘ % sys.argv[1] 8 print query 9 curs.execute(query) 10 names = [f[0] for f in curs.description] 11 for row in curs.fetchall(): 12 for pair in zip(names,row): 13 print ‘%s: %s‘% pair 14 print
运行程序,通过命令行传递查询参数:
python food_query.py "kcal <=100 AND fiber >= 10 ORDER BY sugar"
python基础教程总结12——数据库
标签:
本文系统来源:http://www.cnblogs.com/zxqstrong/p/4671768.html
内容总结
以上是互联网集市为您收集整理的python基础教程总结12——数据库全部内容,希望文章能够帮你解决python基础教程总结12——数据库所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。