python 基础教程 13数据库支持

数据库应用程序示例:
基于USDA的营养数据实验室提供的数据:https://www.ars.usda.gov/nutrientdata 点击下面的链接
这里写图片描述

这里写图片描述

点击download链接, 下载标题为Abbreviated下方的ASCII链接所指向的ASCCII格式的zip文件,取里面的ABBREV.txt文本文件,该文件数据每一行都有一个数据记录,字段以脱字符(^)进行分割, 数字字段直接包含数字,而文本字段包括波浪号(~)括起来的字符串值

将数据导入数据库:

#coding: utf-8
'''
Created on 2017年8月20日

@author: Leoi
'''
#importdata.py

import sqlite3

#convert将每一行分解为多个字段
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()    #创建一个光标conne.cursor()

try:
    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
    )

    ''')

except:
    pass

query = 'INSERT INTO food VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' 

for line in open(r'C:\Users\Leoi\Desktop\python code\ABBREV.txt'):
    fields = line.split('^')
    vals = [convert(f) for f in fields[:10]]  #此处修改为10,因为每个表有10个数据
    curs.execute(query, vals)  #执行sql的INSERT语句将文本字段中的值插入到数据库中

conn.commit()
conn.close()

对数据库进行查询:

#coding: utf-8
#food_query.py

import sqlite3, sys

conn = sqlite3.connect('food.db')
curs = conn.cursor()  #游标,用于执行查询和检查结果

query = 'SELECT * FROM food WHERE %s' % 'kcal <= 100 AND fiber >=10'
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 

将书上的sys.argv[1]改为了kcal <= 100 AND fiber >=10或其他sql查询条件,不用命令行的形式运行,该程序为一次性程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值