1,引言
Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配Python建网站,或者为python网络爬虫存储数据。SQLite还在其它领域有广泛的应用,比如HTML5和移动端。

Python标准库中的sqlite3提供该数据库的接口。

2,Python对SQLite进行操作示例

以下的代码将创建一个简单的关系型数据库,为一个书店存储书的分类和价格。数据库中包含两个表:category用于记录分类,book用于记录某本书的信息。一本书归属于某一个分类,因此book有一个外键(foreign key),指向catogory表的主键id。

2.1 创建数据库

首先,创建数据库,以及数据库中的表。在使用connect()连接数据库后,就可以通过定位指针cursor,来执行SQL命令:

import sqlite3

# test.db is a file in the working directory.
conn = sqlite3.connect("test.db") c = conn.cursor() # create tables
c.execute('''CREATE TABLE category
(id int primary key, sort int, name text)''')
c.execute('''CREATE TABLE book
(id int primary key,
sort int,
name text,
price real,
category int,
FOREIGN KEY (category) REFERENCES category(id))''') # save the changes
conn.commit() # close the connection with the database
conn.close()

SQLite的数据库是一个磁盘上的文件,如上面的test.db,因此整个数据库可以方便的移动或复制。test.db一开始不存在,所以SQLite将自动创建一个新文件。

利用execute()命令,执行了两个SQL命令,创建数据库中的两个表。创建完成后,保存并断开数据库连接。

2.2 插入数据

上面创建了数据库和表,确立了数据库的抽象结构。下面将在同一数据库中插入数据:

import sqlite3

conn = sqlite3.connect("test.db")
c = conn.cursor() books = [(1, 1, 'Cook Recipe', 3.12, 1),
(2, 3, 'Python Intro', 17.5, 2),
(3, 2, 'OS Intro', 13.6, 2),
] # execute "INSERT"
c.execute("INSERT INTO category VALUES (1, 1, 'kitchen')") # using the placeholder
c.execute("INSERT INTO category VALUES (?, ?, ?)", [(2, 2, 'computer')]) # execute multiple commands
c.executemany('INSERT INTO book VALUES (?, ?, ?, ?, ?)', books) conn.commit()
conn.close()

插入数据同样可以使用execute()来执行完整的SQL语句。SQL语句中的参数,使用"?"作为替代符号,并在后面的参数中给出具体值。这里不能用Python的格式化字符串,如"%s",因为这一用法容易受到SQL注入攻击。

也可以用executemany()的方法来执行多次插入,增加多个记录。每个记录是表中的一个元素,如上面的books表中的元素。

2.3 查询

在执行查询语句后,Python将返回一个循环器,包含有查询获得的多个记录。循环读取,也可以使用sqlite3提供的fetchone()和fetchall()方法读取记录:

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor() # retrieve one record
c.execute('SELECT name FROM category ORDER BY sort')
print(c.fetchone())
print(c.fetchone()) # retrieve all records as a list
c.execute('SELECT * FROM book WHERE book.category=1')
print(c.fetchall()) # iterate through the records
for row in c.execute('SELECT name, price FROM book ORDER BY sort'):
print(row)

2.4 更新与删除

可以更新某个记录,或者删除记录:

conn = sqlite3.connect("test.db")
c = conn.cursor() c.execute('UPDATE book SET price=? WHERE id=?',(1000, 1))
c.execute('DELETE FROM book WHERE id=2') conn.commit()
conn.close()

也可以直接删除整张表:

c.execute('DROP TABLE book')

如果删除test.db,那么整个数据库会被删除。

3,总结

sqlite3是一个SQLite的接口。想要熟练的使用SQLite数据库,需要学习关系型数据库的知识。在一些场景下,Python网络爬虫可以使用SQLite存储采集到的网页信息。GooSeeker爬虫DS打数机将在7.x版本支持SQLite,不妨想想一下Python网络爬虫与DS打数机连接在一起会怎样。

4,文档修改历史
2016-07-15:V1.0,首次发布

Python信息采集器使用轻量级关系型数据库SQLite的更多相关文章

  1. 轻量级本地数据库SQLite在WinRT的使用

    开发环境:Windows 8.1 开发工具:Visual Studio Express 2013 for Windows SQLite数据库介绍 1.SQLite是一款轻型的嵌入式数据库,使用C++开 ...

  2. python 学习笔记6(数据库 sqlite)

    26. SQLite 轻量级的关系型数据库 SQLite是python自带的数据库,可以搭配python存储数据,开发网站等. 标准库中的 sqlite3 提供该数据库的接口. 1. 基本语法如下 c ...

  3. [深入浅出iOS库]之数据库 sqlite

    一,sqlite 简介 前面写了一篇博文讲如何在 C# 中使用 ADO 访问各种数据库,在移动开发和嵌入式领域也有一个轻量级的开源关系型数据库-sqlite.它的特点是零配置(无需服务器),单磁盘文件 ...

  4. Python学习笔记 使用数据库SQlite Mysql

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用当中, 甚至在IOS和Android的APP中都可以集成 Python就内 ...

  5. Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)

    day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库:    简称:DataBase ---->DB    数据库即存放数据的仓库, ...

  6. SQLite vs MySQL vs PostgreSQL:关系型数据库比较

    自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...

  7. (转)轻量级数据库 SQLite

    SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是免费的,提供了大多数基本的管理功能. SQLite Exp ...

  8. SQLite -- 嵌入式关系型数据库

    SQLite -- 嵌入式关系型数据库 1.SQLite的数据类型:Typelessness(无类型) 1,能够保存不论什么类型的数据到表的随意列中 2.支持常见的类型如: NULL, VARCHAR ...

  9. 关系型数据库工作原理-客户端连接管理器(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

随机推荐

  1. python-整理-logging日志

    python的日志功能模块是logging 功能和使用方式非常类似于log4 如何使用logging: # 导入日志模块import logging# 使用配置文件设置日志时,需要导入这个模块 imp ...

  2. [C++程序设计]内置函数

    注意: 可以在声明函数和定义函数时同时写 inline,也可以只在其中一处声明inline,效果相同,都能按内置函数处理. 使用内置函数可以节省运行时间,但却增加了目标 程序的长度.因此一般只将规模很 ...

  3. 关于Mysql不能被远程连接的问题

    1.修改mysql配置文件 注释掉   #bind_address:127.0.0.1 2.授权账户远程连接权限 grant all priveleges on '.' To 'myuser'@'%' ...

  4. 动态PDF在线预览

    实战动态PDF在线预览及带签名的PDF文件转换 开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是 ...

  5. c# GridView Footor列求合计

    显示效果: 前台代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" ...

  6. js判断字符串中的英文和汉字

    有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 方法一 正则表达式,test()方法返回true 或 ...

  7. javascript string对象的属性与方法

    一 创建string对象 new string('string'); 更直接的定义方法是var str = 'string'; 二 string属性 1.constructor 2.lenght 字符 ...

  8. Ubuntu14.04LST 安装Oracle SQL Developer 4.0.2

    1:Oracle SQL Developer 4.0.2下载链接: http://www.oracle.com/technetwork/developer-tools/sql-developer/do ...

  9. Linux APP源码级编译安装

    首先需要了解下tar包. 以下文章作出解释了: http://www.cnblogs.com/laipDIDI/articles/2214270.html http://baike.baidu.com ...

  10. 瑞柏匡丞:用全局观开发App

    不管是互联网金融还是生活服务,移动端APP开发都是各大商家关注的重点.众多研发机构的涌入,使得APP的市场环境已经再无技术壁垒可言.在APP市场中,神州锐达的研发水准和客户认同度,一直受到业内人士的称 ...