备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库。和SQLite做演示样本

------

Python数据库API

为了解决Python中各种数据库模块间的兼容问题,如今已经通过了一个标准的DB API。

眼下的API版本号(2.0)定义在PEP249中的Python Database API Specification v2.0中.

异常

为了尽可能准确地处理错误,API中定义了一些异常。它们被定义在一种层次结构中,所以能够通过一个except块捕捉多种异常.

连接和游标

为了使用基础数据库系统,必须连接它。就要用到connect函数。该函数有多个參数.

connect函数返回连接对象。

这个对象表示眼下和数据库的会话。连接对象支持的方法例如以下:

rollback: 必须该数据库支持。否则不可用

commit  : 总是可用的,可是假设有的数据库不支持事务,则不起作用

cursor  : 游标对象。通过游标运行SQL查询并检查结果。游标支持的方法很多其它.

类型:

数据库对插入到具有某种类型的列中的值有不同的要求。是为了能正确与基础SQL数据库进行交互操作.

以下以sqlite3模块为例:

SQLite和PySQLite

这里选择了小型数据库引擎SQLite,不须要作为独立的server执行。而且不基于集中式数据库存储机制。而是直接作用于本地文件. 从Python 2.5開始, SQLite的优势在于它的一个包装PySQLite已经包含在数据库内,不须要单独安装. SQLite站点下载源代码: http://sqlite.org

------

入门:

#导入模块

>>>import
sqlite3

#建立连接,文件不存在则会创建

>>>conn =
sqlite3.connect('test.db')

#获得连接的游标

>>>curs =
conn.cursor()

#提交事务,这样操作才会保留在本地

>>>conn.commit()

#关闭数据库

>>>conn.close()

------

演示样例:

准备数据:将站点:http://www.ars.usda.gov/nutrientdata主页上点击USDA
National Nutrient Database for Standard Reference链接,ASCII保持的zip数据文件,保留到本地,ABBREV.txt文件,格式大致例如以下:

~23451~^~BEEF,NZ,IMP,BRISKET POINT END,LN & FAT,RAW~^70.11^

~23452~^~BEEF,NZ,IMP,CHUCK EYE ROLL,LN & FAT,CKD,BRSD~^55.95^

字段以^进行切割。数字字段包括数字,而文本段包括~的字符串值.能够用line.split('^')将一行文字解析为多个字段。

对于其它的数字字段,使用float(field).以下是完整的脚本及输出结果:

  • 代码清单1: 将数据导入本地数据库
import sqlite3

def convert(value):
if value.startswith('~'):
return value.strip('~')
if not value:
value = '0'
return float(value) conn = sqlite3.connect('food.db')
curs = conn.cursor() curs.execute('''
CREATE TABLE food(
id TEXT PRIMARY KEY,
desc TEXT,
water FLOAT,
kcal FLOAT,
protein FLOAT,
fat FLOAT,
ash FLOAT,
carbs FLOAT,
fiber FLOAT,
sugar FLOAT
)
''') query = 'INSERT INTO food VALUES(? ,? ,?,?,?,? ,?,?,?,?)' for line in open('ABBREV.txt'):
fields = line.split('^')
vals = [convert(f) for f in fields[:10]]
curs.execute(query,vals) conn.commit()
conn.close()
  • 代码清单2: 食品数据库查询程序
import sqlite3,sys

conn = sqlite3.connect('food.db')
curs = conn.cursor() query = 'SELECT * FROM food WHERE %s' % sys.argv[1]
print query
curs.execute(query) names = [f[0] for f in curs.description]
for row in curs.fetchall():
for pair in zip(names,row):
print '%s: %s' % pair
print

输出结果:

+++++++++++++++++++++++++++++++++++++++++++++++++

d:\>python food_query.py id

id: 23449

desc: BEEF,NZ,IMP,BRISKET NAVAL END,LN & FAT,RAW

water: 53.33

kcal: 345.0

protein: 15.81

fat: 31.27

ash: 0.61

carbs: 0.0

fiber: 0.0

sugar: 0.0



id: 23450

desc: BEEF,NZ,IMP,BRISKET POINT END,LN & FAT,CKD,BRSD

water: 54.66

kcal: 250.0

protein: 31.94

fat: 13.6

ash: 0.78

carbs: 0.0

fiber: 0.0

sugar: 0.0

+++++++++++++++++++++++++++++++++++++++++++++++++

d:\>python food_query.py "kcal<=100 AND fiber >=0 ORDER BY sugar"

id: 09512

desc: GRAPE JUC,CND OR BTLD,W/ ADDED VIT C & CA

water: 84.51

kcal: 62.0

protein: 0.37

fat: 0.13

ash: 0.22

carbs: 14.77

fiber: 0.2

sugar: 14.2

版权声明:本文博客原创文章。博客,未经同意,不得转载。

&lt;&lt;Python基础课程&gt;&gt;学习笔记 | 文章13章 | 数据库支持的更多相关文章

  1. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第10章 | 充电时刻

    第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...

  2. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第11章 | 文件和素材

    打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #假设文件不在.会报以下错误: >>> f = open(r'D:\text ...

  3. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第04章 | 字典

    第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中.键能够使字符.数字.或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每一个键都是由坐标值组 ...

  4. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第12章 | 图形用户界面

    Python支持的工具包非常多.但没有一个被觉得标准的工具包.用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: http://wxpython.org/ ------ ...

  5. #Python学习笔记:1-3章 (基于《python编程,从入门到实践)

    第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...

  6. 《机器学习实战》学习笔记——第13章 PCA

    1. 降维技术 1.1 降维的必要性 1. 多重共线性--预测变量之间相互关联.多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯.2. 高维空间本身具有稀疏性.一维正态分布有68%的值落于正负 ...

  7. 【Oracle】曾经的Oracle学习笔记(1-3) 数据库常见用语,常见命令,创建测试表

    一.数据库的登录 二.数据库常用语 三.测试表的创建,测试数据初始化 四.常见命令介绍 五.测试 user:jeffreysn:jeffrey user:systemsn:jeffrey 浏览器中输入 ...

  8. R语言学习笔记-机器学习1-3章

    在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...

  9. java JDK8 学习笔记——第13章 时间与日期

    第十三章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 1.格林威治标准时间GMT 格林威治标准时间的正午是太阳抵达天空最高点之时.现在已经不作为标准时间使用. 2.世界时UT世界时 ...

随机推荐

  1. mysql语句中使用like后面的%(百分号)的问题

    问题:mysql语句中使用like后面的%(百分号) 是不是越多运行效率越慢! 总用时:0.0489秒 0.0691 0.0485 0.0467 SELECT `goods_name`, `goods ...

  2. HDU 4333 Revolving Digits 扩张KMP

    标题来源:HDU 4333 Revolving Digits 意甲冠军:求一个数字环路移动少于不同数量 等同 于的数字 思路:扩展KMP求出S[i..j]等于S[0..j-i]的最长前缀 推断 nex ...

  3. STL--F - Sequence(n*m-&gt;之前的最低要求m个月)

    F - Sequence Time Limit:6000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  4. 基于HTML5气3D仿真培训系统

    根据最近的上线HTML5的燃气3D培训仿真系统.曾经的老系统是採用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但由于这次新产品需求要求能 ...

  5. CSDN Androidclient生产 导航帖

    弄个导航棒.的相关知识汇总. CSDN Android的client的效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1qNjIzNTY1Nzk ...

  6. IndexReader已解决的问题

    设计和实时搜索的发展,IndexReader饮酒数成为0当调用doClose,和SegmentReader再有一个addCoreClosedListener控制的方法SegmentCoreReader ...

  7. 使用SQLCMD在SQLServer执行多个脚本

    原文:使用SQLCMD在SQLServer执行多个脚本 概述: 作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百个 ...

  8. Unity3d 实时折射和反射

    这里只是张贴在实时折射和脚本反思shader, 大约NGUI第一部分请下载. 这个版本的主要缺点是折射平面部Layer必须是water层.假设有专家谁可以摆脱这一个.请记得把代码回该条,谢谢! Wat ...

  9. 采用CSS3 Media Query技术适应Android平板屏幕分辨率和屏幕像素密度

    采用HTML5在开发移动应用程序满足各种需求Android分辨率和屏幕的平板设备密度,这是非常麻烦的过程,最终的解决方案是使用css media query,匹配相同的时间分辨率和屏幕像素密度.上进行 ...

  10. COC+RTS+MOR游戏开发 一(游戏特色分析,和实践)

    本场比赛的临时名称 游戏特色(-):COC风格 ,塔防养成类游戏.          一款史诗般的战斗策略游戏.玩家须要建立村庄,成千上万的网友训练玩家的军队和战斗. 游戏中玩家须要不断的提高军队的作 ...