- 论坛徽章:
- 0
|
继续阅读《Beginning Python》, From Novice to Professional, Second Editon的源代码;
附上笔者微调后的代码,已添加详细注释:
# 源代码来自“Beginning Python, From novice to professional, second Edtion”
# 在此非常感谢原作者;Magnus Lie Hetland
# 本文中所有注释由walnutcy(青核桃)完成,
# 青核桃的联系方式:walnutcy@gmail.com
# 青核桃的个人小站:http://gnssinfo.com
# 如有问题,欢迎大家在博客小站留言
import sqlite3
def convert(value):
''' 根据第一个字符内容,转换数据并返回;
第一个字符为“~”,则转为字符串,否则转为浮点数 '''
if value.startswith('~'):
return value.strip('~')
if not value:
value = '0'
return float(value)
# 连接数据库,sqlite3内部的实现是,若数据不存在,则直接创建
# sqlite3相关信息,在其官网上有详细介绍
conn = sqlite3.connect('food.db')
# 创建一个cursor的实例以备后边执行SQL语句;
curs = conn.cursor()
# 开始执行语句,这里为创建表: food
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
)
''')
# 创建查询语句,在此青核桃带大家一起看下python官方帮助文档中的介绍吧
# 这个非常重要,
# # Never do this -- insecure!
# symbol = 'IBM' # 不能用%s进行转换
# c.execute("select * from stocks where symbol = '%s'" % symbol)
# Do this instead
# t = ('IBM',)
# c.execute('select * from stocks where symbol=?', t)
query = 'INSERT INTO food VALUES (?,?,?,?,?,?,?,?,?,?)'
for line in open('ABBREV.txt'):
fields = line.split('^')
vals = [convert(f) for f in fields[:len(fields)]]
curs.execute(query, vals)
conn.commit()
conn.close()
代码测试需要ABBREV.txt文件,源代码中未附,这里笔者写了一个非常简单的,只有3条记录,如下:
~A0125^~Hello World^20.1^10.2^3.2^1.1^120.1^110.2^31.2^11.1
~A0165^~google^25.1^14.2^33.2^187.1^120.1^160.2^31.2^11.1
~A0184^~gnssinfo.com^28.1^140.2^34.2^541.1^120.1^140.2^31.2^11.1
执行指令完成后,可通过SQLITE3数据库的浏览工具查看,结果如下:
表定义图:
sqlite-food-1
插入的数据如下图:
sqlite-food-2
|
|