zoukankan      html  css  js  c++  java
  • <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持

    备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库。和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





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

  • 相关阅读:
    【WF2017】Mission Improbable
    【Codeforces 837D】Round Subset
    【Codeforces 788C】The Great Mixing
    【JSOI2008】最大数
    2.1图像的数字化
    MATLAB生成随机数
    四六级准考证号忘记了如何快速查询四六级成绩?
    加密与水印结合
    如何在 PyPI安装python的软件包?
    matlab中如何定义函数
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4754212.html
Copyright © 2011-2022 走看看