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

  1. SQLite本身是C写,所以体积小巧,占用资源低
  2. SQLite本身是C写,所以处理速度非常快
  3. SQLite已经发布SQLite 3 版本
  4. SQLite3支持Windows/Linux/Unix等主流操作系统
  5. 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 语句的基本语法如下:

CREATE TABLE database_name.table_name(column1 datatype  PRIMARY KEY(one or more columns),column2 datatype,column3 datatype,.....columnN datatype,
);

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

c.execute('''CREATE TABLE STOCK600123(ID INT PRIMARY KEY   NOT NULL,TIME          TEXT    NOT NULL,CODE          INT     NOT NULL,HIGH          REAL,LOW           REAL,CLOSE         REAL,OPEN          REAL,DESCRIPTION CHAR(50));''')

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

connection.commit()

如果未调用该方法,那么所做的任何操作对数据库来说都是无效的。
我们可以查看表结构来验证表是否已成功创建,如下接口可将查询到的结果以列表形式返回所有行:

cursor.fetchall()

整体操作如下所示:

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("INSERT INTO STOCK600123 (ID,TIME,CODE,HIGH,LOW,CLOSE,OPEN,DESCRIPTION) VALUES (1, '2019-1-1', 600123, 10.12, 10.12, 10.12, 10.12,'event1' )")c.execute("INSERT INTO STOCK600123 (ID,TIME,CODE,HIGH,LOW,CLOSE,OPEN,DESCRIPTION) VALUES (2, '2019-1-2', 600123, 10.13, 10.13, 10.13, 10.13,'event2' )")c.execute("INSERT INTO STOCK600123 (ID,TIME,CODE,HIGH,LOW,CLOSE,OPEN,DESCRIPTION) VALUES (3, '2019-1-3', 600123, 10.14, 10.14, 10.14, 10.14,'event3' )")c.execute("INSERT INTO STOCK600123 (ID,TIME,CODE,HIGH,LOW,CLOSE,OPEN,DESCRIPTION) VALUES (4, '2019-1-4', 600123, 10.15, 10.15, 10.15, 10.15,'event4' )")
conn.commit()

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

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这四部分信息,如下所示:

# 选择表
cursor = conn.execute("SELECT id, time, code, description from STOCK600123")
for row in cursor:print("ID = {}; TIME = {}; CODE = {}; description = {};n".format(row[0],row[1],row[2],row[3]))
ID = 1; TIME = 2019-1-1; CODE = 600888; description = event1;
ID = 2; TIME = 2019-1-2; CODE = 600123; description = event2;
ID = 3; TIME = 2019-1-3; CODE = 600123; description = event3;
ID = 4; TIME = 2019-1-4; CODE = 600123; description = event4;

六、删除表

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

# 删除表
c.execute("DELETE from STOCK600123 where ID=2;")
conn.commit()# 选择表
cursor = conn.execute("SELECT id, time, code, description from STOCK600123")
for row in cursor:print("ID = {}; TIME = {}; CODE = {}; description = {};n".format(row[0],row[1],row[2],row[3]))

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

# 删除一个表
c.execute("drop table STOCK600123")
conn.commit()

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

connection.close()

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

·······································
欢迎大家订阅《教你用 Python 进阶量化交易》专栏!

作者:袁霄

链接:http://www.imooc.com/article/289247

node sqlite 插入数据_Python基础系列讲解——如何使用自带的SQLite数据库相关推荐

  1. node sqlite 插入数据_方便且实用,Python内置的轻量级数据库实操

    之前我们在很多项目案例中都使用了MySQL数据库.有的同学问:MySQL安装和配置太麻烦了,老是搞不定,有没有更简便的方法? 当然有咯! Python内置的sqlite3模块就是一个轻量级的数据库,不 ...

  2. python组合和继承_Python基础系列讲解——继承派生和组合的概念剖析

    Python作为一门面向对象的语言,它的面向对象体系中主要存在这么两种关系,一个是"类"和"实例"的关系,另一个是"父类"和"子类 ...

  3. 大数据入门基础系列之初步认识大数据生态系统圈(博主推荐)

    不多说,直接上干货! 之前在微信公众平台里写过 大数据入门基础系列之初步认识hadoop生态系统圈 http://mp.weixin.qq.com/s/KE09U5AbFnEdwht44FGrOA 大 ...

  4. node sqlite 插入数据_使用 Sequelize 操作 Sqlite3 数据库

    0x01 Sequelize 是什么? Sequelize 是一个基于 Promise 的 Node.js ORM,目前支持 Postgres.MySQL.SQLite 和 Microsoft SQL ...

  5. 在列表前方插入一个数据_Python基础知识详解(三):数据结构篇

    作者 | CDA数据分析师 1.列表的概念 列表(list)是用来存储一组有序数据元素的数据结构,元素之间用都好分隔.列表中的数据元素应该包括在方括号中,而且列表是可变的数据类型,一旦创建了一个列表, ...

  6. python无效数据怎么办_Python使用sqlite插入数据无效的原因

    使用爬虫时,将数据爬下来之后进行插入操作,但是查看数据库的时候发现并没有任何数据插入.查看被插入数据的格式和内容时机都已经被抓下来了,搜索了很久没有找到答案,最终还是在stackoverflow上面找 ...

  7. 用python向mongodb插入数据_Python操作MongoDB数据库(一)

    Python操作MongoDB数据库(一) 前言 干货文章继续出发!隔的时间有些久了哈,对 MongoDB 安装回顾的同学,可以看下windows环境 <初识 MongoDB 数据库>.这 ...

  8. influxdb 插入数据_Influx Sql系列教程五:insert 添加数据

    接下来开始进入influxdb的curd篇,首先我们看一下如何添加数据,也就是insert的使用姿势 在进入本篇之前,对于不了解什么是retention policy, tag, field的同学,有 ...

  9. 求python一个类与对象的代码_Python基础系列(五)类和对象,让你更懂你的python代码...

    首先,非常感谢各位打开本博文,本博文是Python入门基础系列文章之一,Python目前是非常火的编程工具,其实作为编程不在只是程序员的专利,每一个人在日常的工作中.学习中都会或多或少的要用到一些工具 ...

最新文章

  1. docker探索-使用docker service管理swarm(十一 )
  2. Error in exists(x): 第一个参数不对
  3. python建立访客记录
  4. CUDA与Java速度比较---生成Julia数据集并画图
  5. python中for循环和while循环的区别_python中while循环和for循环的定义和详细的使用方法...
  6. 什么是Lucene和Solr和Elasticsearch,它们的区别是什么?
  7. Metalink使用指南
  8. 感觉要火!妹子实地采访网易猪厂程序员七夕怎么过
  9. 微软服务器问题,微软服务器内存溢出问题 | 【韩涛博客】
  10. MT-Retina.js
  11. Redis 快速入门
  12. MATLAB一维数组的创建与元素提取
  13. 函数 的 重载 和 函数 模版
  14. 【第68期】智能时代下的计算机系统能力培养
  15. VLAN与trunk配置 实验 思科模拟器Cisco
  16. 苹果好用的测试软件,四款主流苹果设备管理软件横向评测
  17. 计算机控制人脑的电影,推荐20部全球经典烧脑电影,考验你智商的时刻到了(上)...
  18. 中国电视、广播产业运营状况及收入规模调研报告2021-2027年
  19. Linux中make, make install命令分别是什么,用法?
  20. Docker学习手记-1

热门文章

  1. android 弹窗圆角,Android开发笔记: Android最简单的圆角提示框
  2. spider和python的关系_Scrapy框架-Spider和CrawlSpider的区别
  3. php中mysql数据库集群,MySQL集群
  4. mysql 目录位置_更改MySQL数据库目录位置
  5. 超详细 | 接口自动化测试总结与分享入门篇
  6. 如何看待部分985研究生不如本科生,只能去做软件测试?
  7. java中调用数组参数_java中如何调用带有数组类型参数的存储过程
  8. python多图合并成一张图_将现有的图形合并成一个图形PYTHON的pdf格式
  9. java随机生成字母用三元运算符,【代码笔记】Java常识性基础补充(一)——赋值运算符、逻辑运算符、三元运算符、Scanner类、键盘输入、Random类、随机数...
  10. monit监控mysql_monit监控工具(客户端)