资讯专栏INFORMATION COLUMN

Python信息采集器使用轻量级关系型数据库SQLite

loonggg / 1477人阅读

摘要:,引言自带一个轻量级的关系型数据库。作为后端数据库,可以搭配建网站,或者为网络爬虫存储数据。在一些场景下,网络爬虫可以使用存储采集到的网页信息。爬虫打数机将在版本支持,不妨想想一下网络爬虫与打数机连接在一起会怎样。

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-07:V1.0,首次发布

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38037.html

相关文章

  • Python爬虫建站入门手记——从零开始建立采集站点(三:采集入库)

    摘要:进入正题第三部分,采集入库。内容如下加上这个可以记住问题在的位置,方便以后更新或者其他操作都很直白,关于各个可以看看的文档。代码如下添加方法采集当前分页正在抓取分页这个地方写得很笨,之前该在加上这个属性。 上回,我已经大概把爬虫写出来了。 我写了一个内容爬虫,一个爬取tag里面内容链接的爬虫 其实还差一个,就是收集一共有哪些tag的爬虫。但是这里先不说这个问题,因为我上次忘了 这次又不...

    amuqiao 评论0 收藏0
  • 一步一步教你如何搭建自己的视频聚合站

    摘要:不过因为各个平台互相挖人的关系,导致关注的一些主播分散到了各个直播平台,来回切换有点麻烦,所以萌生了做一个视频聚合站的想法。后续我们会对这三个部分的功能做逐一展开说明。正则处理要求比较高,但是几乎能应对所有的情况,属于大杀器。 前言 作为一个炉石传说玩家,经常有事没事开着直播网站看看大神们的精彩表演。不过因为各个平台互相挖人的关系,导致关注的一些主播分散到了各个直播平台,来回切换有点麻...

    justjavac 评论0 收藏0
  • ORM-像对象一样对待数据

    摘要:顾名思义,就是将关系型数据库与中的对象关联起来,提供了一种操作数据的简便方式,相当于对数据库加了一层更友好的接口。新增数据对象方法方法直接创建数据对象,需要调用方法保存到数据库中。 咱们编程教室有不少同学,学完了基础课程,掌握了一定的编程能力,开始做项目了。然后很可能遇到一个问题:管理数据。课程里有讲过用文件保存数据,还有 pickle 、 csv 等模块辅助。但对于稍微复杂一点的数据...

    U2FsdGVkX1x 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<