22. Python脚本学习笔记二十二数据库支持
2017-11-11 21:36
453 查看
22. Python脚本学习笔记二十二数据库支持
本篇名言:“如果你周围是一群鹰的话,那么你自己也会成为一只鹰;如果是在一群山雀中间的话,那么你就看不到海阔天空。”
在Python脚本上,我们居然一步一步的走了那么远了,实在不易啊~。“千里之行,始于脚下”。继续书写新的篇章~
我们来看下简单数据库SQLite使用。
Python为解决各种数据库模块间的兼容问题,现在已经通过了一个标准的DB API。
任何支持DB API的数据库模块都必须定义3个描述模块特性的全局变量。
Apilevel可以是1.0或者2.0
Threadsafety可以是0~3.0表示先出完全不共享模块,3表示模块是完全线程安全的,1表示线程本身可以共享模块。
Paramstyle表示执行多次类似查询的时候,参数是如何被拼接到SQL查询中的。
Connect函数返回连接对象,连接对象支持如下的方法:
2.1游标对象cursor
通过游标执行SQL查询并检查结果。游标比连接支持更多的方法。如下:
此外游标对象还具有一些特性如下表:
importsqlite3
conn=sqlite3.connect('somedatabase.db')
curs=conn.cursor()
importsqlite3
def
convert(value):
if value.startswith('~'):
return value.strip('~')
ifnot value:
value = '0'
return float(value)
conn = sqlite3.connect('food.db')
curs = conn.cursor()
curs.execute('drop table 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
)
''')
query = 'INSERT INTO food VALUES (?,?,?,?,?,?,?,?,?,?)'
forline
in open('data.txt'):
fields = line.split('^')
vals = [convert(f) for fin
fields]
curs.execute(query, vals)
conn.commit()
conn.close()
其中data.txt内容如下,随便写的
~1~^~ok~^10^100^20^1^2^2^3^7
~2~^~1ok`^10^30^20^1^2^2^4^8
~3~^~2ok`^10^5^20^1^2^2^5^9
~4~^~o3k~^10^7^10^10^12^21^2^10
导入完毕,我们尝试查询
importsqlite3,
sys
conn = sqlite3.connect('food.db')
curs = conn.cursor()
query = 'SELECT * FROM food WHERE water==10'
printquery
curs.execute(query)
names = [f[0]
for fin curs.description]
forrow
in curs.fetchall():
for pair
in zip(names, row):
print'%s: %s' %pair
print
最后输出如下:
SELECT* FROM food WHERE water==10
id: 1
desc:ok
water:10.0
kcal:100.0
protein:20.0
fat:1.0
ash:2.0
carbs:2.0
fiber:3.0
sugar:7.0
id: 2
desc:1ok`
water:10.0
kcal:30.0
protein:20.0
fat:1.0
ash:2.0
carbs:2.0
fiber:4.0
sugar:8.0
id: 3
desc:2ok`
water:10.0
kcal:5.0
protein:20.0
fat:1.0
ash:2.0
carbs:2.0
fiber:5.0
sugar:9.0
id: 4
desc:o3k
water:10.0
kcal:7.0
protein:10.0
fat:10.0
ash:12.0
carbs:21.0
fiber:2.0
sugar:10.0
本篇名言:“如果你周围是一群鹰的话,那么你自己也会成为一只鹰;如果是在一群山雀中间的话,那么你就看不到海阔天空。”
在Python脚本上,我们居然一步一步的走了那么远了,实在不易啊~。“千里之行,始于脚下”。继续书写新的篇章~
我们来看下简单数据库SQLite使用。
Python为解决各种数据库模块间的兼容问题,现在已经通过了一个标准的DB API。
任何支持DB API的数据库模块都必须定义3个描述模块特性的全局变量。
Apilevel可以是1.0或者2.0
Threadsafety可以是0~3.0表示先出完全不共享模块,3表示模块是完全线程安全的,1表示线程本身可以共享模块。
Paramstyle表示执行多次类似查询的时候,参数是如何被拼接到SQL查询中的。
1. 异常
异常类可以尽可能准确的处理错误。我们看看DBAPI使用的异常。如下:2. 连接和游标
连接函数connect,该函数有多个参数,具体使用取决于数据库。参数含义如下:Connect函数返回连接对象,连接对象支持如下的方法:
2.1游标对象cursor
通过游标执行SQL查询并检查结果。游标比连接支持更多的方法。如下:
此外游标对象还具有一些特性如下表:
3. 类型
数据库对插入到具有某种类型的列中的值有不同的要求,为了能正确基础SQL数据库进行交互操作,DB API定义了用于特殊类型和值的构造函数及常量。当前DB API提供的构造函数和特殊值如下:4. SQLite
SQLite 优势在已经被包括在标准库内。可以直接拿来使用。importsqlite3
conn=sqlite3.connect('somedatabase.db')
curs=conn.cursor()
5. 应用示例
从文件中导数数据到数据库如下:importsqlite3
def
convert(value):
if value.startswith('~'):
return value.strip('~')
ifnot value:
value = '0'
return float(value)
conn = sqlite3.connect('food.db')
curs = conn.cursor()
curs.execute('drop table 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
)
''')
query = 'INSERT INTO food VALUES (?,?,?,?,?,?,?,?,?,?)'
forline
in open('data.txt'):
fields = line.split('^')
vals = [convert(f) for fin
fields]
curs.execute(query, vals)
conn.commit()
conn.close()
其中data.txt内容如下,随便写的
~1~^~ok~^10^100^20^1^2^2^3^7
~2~^~1ok`^10^30^20^1^2^2^4^8
~3~^~2ok`^10^5^20^1^2^2^5^9
~4~^~o3k~^10^7^10^10^12^21^2^10
导入完毕,我们尝试查询
importsqlite3,
sys
conn = sqlite3.connect('food.db')
curs = conn.cursor()
query = 'SELECT * FROM food WHERE water==10'
printquery
curs.execute(query)
names = [f[0]
for fin curs.description]
forrow
in curs.fetchall():
for pair
in zip(names, row):
print'%s: %s' %pair
最后输出如下:
SELECT* FROM food WHERE water==10
id: 1
desc:ok
water:10.0
kcal:100.0
protein:20.0
fat:1.0
ash:2.0
carbs:2.0
fiber:3.0
sugar:7.0
id: 2
desc:1ok`
water:10.0
kcal:30.0
protein:20.0
fat:1.0
ash:2.0
carbs:2.0
fiber:4.0
sugar:8.0
id: 3
desc:2ok`
water:10.0
kcal:5.0
protein:20.0
fat:1.0
ash:2.0
carbs:2.0
fiber:5.0
sugar:9.0
id: 4
desc:o3k
water:10.0
kcal:7.0
protein:10.0
fat:10.0
ash:12.0
carbs:21.0
fiber:2.0
sugar:10.0
相关文章推荐
- python进阶学习笔记(三)数据库支持
- <<Python基础教程>>学习笔记 | 第13章 | 数据库支持
- python基础教程_学习笔记22:数据库支持
- <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持
- python进阶学习笔记(三)数据库支持 (实际工作用到了)
- Python 脚本学习笔记(五)集中式病毒扫描,端口扫描以及分段数据库操作
- python进阶学习笔记(三)数据库支持
- python 学习笔记(二十二)
- python学习笔记-抓取网页图片脚本
- Jython-Java操作Python脚本学习笔记(二)
- Python学习笔记(二) -- Python封装数据库
- Python学习笔记——ADO访问数据库
- Python学习笔记21:数据库操作(sqlite3)
- Python学习笔记21:数据库操作(sqlite3)
- Python之学习笔记(数据库使用)
- Selenium学习笔记之005:第一个selenium+python+webdriver脚本
- Python学习笔记-数据库操作
- 【Unity 3D】学习笔记二十二:unity游戏脚本(二)
- python网络编程学习笔记(9):数据库客户端
- Python学习笔记 访问数据库