如何使用自带的SQLite数据库

350 阅读3分钟

  当前流行的数据库有Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDB、Redis、Microsoft Access……SQLite(这个是按某报告调研的受欢迎程度来排名的)。当然每个数据库都有它最适合的应用场合。这里我们推荐一款轻型的关系型数据库SQLite,推荐理由如下:

  SQLite本身是C写,所以体积小巧,占用资源低

  SQLite本身是C写,所以处理速度非常快

  SQLite已经发布SQLite 3 版本

  SQLite3支持Windows/Linux/Unix等主流操作系统

  Python 2.5.x 以上版本默认内置SQLite3,无需单独安装和配置,直接使用!!!

  当我们仅仅是用于本地的数据管理,无需多用户访问,数据容量小于2T,无需海量数据处理,关键是要求移植方便、使用简单、处理迅速的话, SQLite3确实是个很不错的选择。

  在Python 2.5.x以上定义了一套操作SQLite3的API接口,使用时需要导入sqlite3模块,如下所示。

  import sqlite3

  接下来,我们仅需调用接口就可以,我们用例程来介绍下:

  一、连接数据库

  要操作SQLite3首先需要连接到数据库,接口函数:

  sqlite3.connect(database [,timeout ,other optional arguments])

  该函数会链接到 SQLite3数据库并返回一个连接对象,如果数据库不存在,那么将会自动创建一个数据库。如下所示:

  conn = sqlite3.connect('stock-data.db')

  SQLite3是文件型数据库,可以看到一个SQLite3就是一个文件,备份这个文件就备份了整个数据库。

  在连接到数据库后,需要建立Cursor,通过Cursor去执行SQL语句,接口函数:

  connection.cursor([cursorClass])

  使用如下所示:

  c = conn.cursor()

  二、创建表

  数据库中是以表的形式存放数据的,我们在先前创建的数据库中创建一个STOCK600123表。可以使用如下接口去执行一个 SQL 语句:

  cursor.execute(sql [, optional parameters])

  SQL 语句中CREATE TABLE 语句的基本语法如下:

  


  数据库系统识别到CREATETABLE关键字后会创建一个新表。CREATETABLE语句后跟着表的唯一的名称或标识。如下所示:

  


  创建表后记得提交当前的操作,接口函数:

  connection.commit()

  整体操作如下所示:

  c.execute(PRAGMA table_info(STOCK600123))

  print(c.fetchall())

  [(0, 'ID', 'INT', 1, None, 1), (1, 'TIME', 'TEXT', 1, None, 0), (2, 'CODE', 'INT', 1, None, 0), (3, 'HIGH', 'REAL', 0, None, 0), (4, 'LOW', 'REAL', 0, None, 0), (5, 'CLOSE', 'REAL', 0, None, 0), (6, 'OPEN', 'REAL', 0, None, 0), (7, 'DESCRIPTION', 'CHAR(50)', 0, None, 0)]

  三、插入表

  我们上面创建的 STOCK600123表中插入4行数据,如下所示:

  

  我们可以查看表的内容来验证是否已成功插入四行,如下所示:

  c.execute(select * from STOCK600123)

  print(c.fetchall())

  conn.commit()

  [(1, '2019-1-1', 600123, 10.12, 10.12, 10.12, 10.12, 'event1'), (2, '2019-1-2', 600123, 10.13, 10.13, 10.13, 10.13, 'event2'), (3, '2019-1-3', 600123, 10.14, 10.14, 10.14, 10.14, 'event3'), (4, '2019-1-4', 600123, 10.15, 10.15, 10.15, 10.15, 'event4')]

  四、更新表

  当我们需要更新表中的第一行的“CODE”列内容时,可以使用UPDATE 语句,如下所示,600123更新为了600888。

  # 更新表

  c.execute(UPDATE STOCK600123 set CODE = 600888 where ID=1)

  conn.commit()

  c.execute(select * from STOCK600123)

  print(c.fetchall())

  conn.commit()

  [(1, '2019-1-1', 600888, 10.12, 10.12, 10.12, 10.12, 'event1'), (2, '2019-1-2', 600123, 10.13, 10.13, 10.13, 10.13, 'event2'), (3, '2019-1-3', 600123, 10.14, 10.14, 10.14, 10.14, 'event3'), (4, '2019-1-4', 600123, 10.15, 10.15, 10.15, 10.15, 'event4')]

  五、选择表

  从当前创建的 STOCK600123 表中获取id, time, code, description这四部分信息,如下所示:

  六、删除表

  从当前创建的 STOCK600123 表中删除id为2的信息,只剩下id为1、3、4行的内容,如下所示:

 

  当要删除STOCK600123整个表时,如下所示:

  # 删除一个表

  c.execute(drop table STOCK600123)

  conn.commit()

  当关闭数据库连接时,可使用如下接口:

  connection.close()

  该接口不会自动调用 commit(),如果关闭数据库连接前未调用 commit() 方法,所有的更改将丢失,切记!