您的位置:首页 > 编程语言 > Python开发

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查询中的。

 

 

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
    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
 
 

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: