前言

前一段时间偶然的看到了一个名词SQLite3,大概了解到此为一种轻量型的关系型数据库。官网介绍到SQLite是一个进程内库,它实现了一个自包含的、无服务器的、零配置的事务性SQL数据库引擎(官网:https://www.sqlite.org/)。后来也是偶然的机会,公司使用的数据库存储有问题,无意中看到了三线开发工程师尽然使用SQLite命令加了一块数据盘上去,故此对SQLite的好奇就更进一步了,下面简单学习介绍一下。

SQLite于2000年8月17日发布1.0版本,于2001年9月28日发布2.0.0版本,于2004年6月18日发布3.0.0版本,于2018年11月05日发布了3.25.3,这是写本文时最新的一个版本。

(SQLite历史版本)

SQLite是遵守ACID[原子性、一致性、隔离性和持久性]的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。

SQLite遵守ACID,实现了大多数SQL标准。它使用动态的、弱类型的SQL语法。它作为嵌入式数据库,是应用程序,如网页浏览器,在本地/客户端存储数据的常见选择。它可能是最广泛部署的数据库引擎,因为它正在被一些流行的浏览器、操作系统、嵌入式系统所使用。同时,它有许多程序设计语言的语言绑定。SQLite是D. Richard Hipp创建的公有领域项目。

为什么要使用SQLite?

  • 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  • SQLite 不需要配置,这意味着不需要安装或管理。
  • 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
  • SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
  • SQLite 是自给自足的,这意味着不需要任何外部的依赖。
  • SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
  • SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
  • SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
  • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

SQLite的安装

Linux系统和MAC系统均已经集成了SQLite,可直接使用,键入sqlite3即可。如下:

[root@JiekeXu01 ~]# sqlite3SQLite version 3.6.20Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite>

使用.help命令获取更多帮助,使用.quit退出使用界面。如果没有上面的结果,就意味着没有安装,便在官网下载相对应位数的源码tar.gz包,解压此包sqlite-autoconf-3250300.tar.gz编译安装即可。命令如下:

$tar xvfz sqlite-autoconf-3250300.tar.gz$cd sqlite-autoconf-3250300$./configure --prefix=/usr/local$make$make install

编译完后即可使用命令 sqlite3 验证。

在 Windows 上安装 SQLite时,需要下载sqlite-dll-win64-x64-3250300.zip和sqlite-tools-win32-x86-3250300.zip。创建文件夹 D:\sqlite3,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。添加 D:\sqlite3到 PATH 环境变量,最后在命令提示符下,使用 sqlite3 命令,将显示如下结果:

D:\>sqlite3SQLite version 3.25.3.0 2018-11-05 19:53:45Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite>

SQLite基础语法

SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。所有的 SQLite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束。注释是以两个连续的 "-" 字符(ASCII 0x2d)开始,并扩展至下一个换行符(ASCII 0x0a)或直到输入结束,以先到者为准。您也可以使用 C 风格的注释,以 "/*" 开始,并扩展至下一个 "*/" 字符对或直到输入结束,以先到者为准。SQLite的注释可以跨越多行。

SQLite创建数据库:

$sqlite3 DatabaseName.db

SQLite创建表:

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

创建完之后。便可以使用.tables查看相关的表,使用..schema tablename查看表具体信息。那么删除表操作,和Oracle一样,这里不再演示了,使用DROP TABLE database_name.table_name即可删除表,一旦删除表中信息将无法找回了。

SQLite的增、删、改、查和之前学过的Oracle语法一样,均是采用标准SQL格式,这里不再进行说明,如下图所示。

好了关于SQLite的基础知识就介绍这么多,想要了解更多,可访问《菜鸟教程》“http://www.runoob.com/sqlite”,下面简单说说关于Python操作SQLite数据库。

Python操作SQLite

网上很多教程都是Python操作MySQL,Redis,Mongodb的一些教程,这里简单说明Python操作SQLite常用的固定语法。Python 2.5x以上版本内置了SQLite3,使用时直接import sqlite3即可,而SQLite3 模块是由 Gerhard Haring 编写的。

python操作流程大概分为以下五步

  1. 通过sqlite3.open()创建与数据库文件的连接对象connection;
  2. 通过connection.cursor()创建光标对象cursor;
  3. 通过cursor.execute()执行SQL语句;
  4. 通过connection.commit()提交当前的事务,或者通过cursor.fetchall()获得查询结果;
  5. 通过connection.close()关闭与数据库文件的连接。

建立连接:

[oracle@rhel67 ~]$ pythonPython 2.6.6 (r266:84292, May 22 2015, 08:34:51)[GCC 4.4.7 20120313 (Red Hat 4.4.7-15)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>>>>> import sqlite3>>> conn = sqlite3.connect('testDB.db')

这里已经连接到SQLite数据库,“testDB.db”是前面所创建的数据库,当没有此数据库时也会自动创建一个。连接到数据库以后,按照上边的步骤就需要创建光标对象cursor

>>> cursor = conn.cursor()>>>

接下来就可以使用cursor.execute()直接执行SQL语句了。

建立数据库表:

cursor.execute(‘create table student(id int PRIMARY KEY,name text,age int)’)

注意:python2好像不能使用以下语句建立表,但在python3中是可以的,下图使用的是CentOS6.7自带的python2.6.6,SQLite 版本为3.6.20。

cre_tab=”create table student(id int PRIMARY KEY,name text,age int)”cursor.execute(cre_tab)

插入数据库表语句

cursor.execute("insert into student(id,name,age) values (1,'zhangsan',22)")cursor.execute("insert into student values (2,'lisi',24)")cursor.execute("insert into student values (?,?,?)",(3,"wangwu",25))conn.commit()   --插入完之后提交

经过提交后使用以下语句查询

cursor.execute(“select * from student”)>>> cursor.execute("select * from student")<sqlite3.Cursor object at 0x7f1eb1ed1450>>>> print (cursor.fetchall())[(1, u'zhangsan', 22), (2, u'lisi', 24), (3, u'wangwu', 25)]>>>

fetchall()返回的是记录数组,可以通过WHERE子句做更细致的选择。

SQLite3更新语句

cursor.execute(“update student set id=0 where age =22 ”)>>> cursor.execute("update student set id=1 where name ='lisi'")<sqlite3.Cursor object at 0x7f1eb1ed1450>>>> conn.commit()>>> cursor.execute("select * from student")<sqlite3.Cursor object at 0x7f1eb1ed1450>>>> cursor.fetchall()[(0, u'zhangsan', 22), (1, u'lisi', 24), (3, u'wangwu', 25)]

也可以使用以下语句更新,万变不离其宗,都是一样的道理,达到的效果是一样的。

>>> cursor.execute("update student set id = ? where name = ? ",(2,"wangwu"));<sqlite3.Cursor object at 0x7f1eb1ed1450>>>> conn.commit()>>> cursor.execute("select * from student")<sqlite3.Cursor object at 0x7f1eb1ed1450>>>> cursor.fetchall()[(0, u'zhangsan', 22), (1, u'lisi', 24), (2, u'wangwu', 25)]

SQLite3删除语句

cursor.execute("delete from student where age = ? ",(25, ));

cursor.execute("delete from student where name = ? ",("wangwu"));当使用词语去删除时报参数错误,Python认为传递的字符串是一个元组,导致参数过多报错,传递一个参数时括号里一定要加逗号,不然Python会认为是数字,会报不支持的参数类型错误。而使用标准的语法删除时是没有问题的cursor.execute("delete from student where id = 0 ");建议使用此语法删除。

关闭连接

>>> cursor.close()>>> conn.close()

最后不要忘记在完成对数据库的操作以后,千万千万不要忘记关闭连接哦!

写在最后

SQLite是轻量级的关系型数据库,使用简单方便,这里只是简单的了解下增删改查的基础知识,并没深入理解。而你的智能手机上(如iPhone)安装有上百甚至上千个SQLite数据库,如果你现在正在寻找一款能够用于管理科研和临床信息的数据库工具,而且你要求这款工具强大且简单易用,我认为SQLite是你的不二之选。所以还是来看看吧,SQLite你值得拥有!

参考资料:

SQLite官方文档:https://www.sqlite.org/docs.html

菜鸟教程:http://www.runoob.com/sqlite/sqlite-python.html


▼往期精彩回顾▼

Windows环境下基于Anaconda的Python3安装

使用Python爬取《悲伤逆流成河》猫眼信息

让我们来聊一聊微信(基于Python分析)

推荐一个好用的PDF阅读器—悦书阅读器

JiekeXu之路

欢迎关注此公众号,写作不易,您的关注与点赞将是我不断写作的动力,长按以上二维码关注我吧!如果觉得此文对您有帮助,欢迎点赞、分享、转发!

基于Python的SQLite基础知识学习相关推荐

  1. 物联网竞赛-基于CC2530寄存器开发-基础知识学习

    基于CC2530寄存器开发-基础知识学习 一.C语言基础知识学习 二.单片机基础知识学习 三.CC2530数据手册的使用 四.常用到的寄存器或函数 1.常用到的寄存器 2.常需要用到的宏.自定义的函数 ...

  2. SQLite基础知识学习

    前 言 前一段时间偶然的看到了一个名词SQLite3,大概了解到此为一种轻量型的关系型数据库.官网介绍到SQLite是一个进程内库,它实现了一个自包含的.无服务器的.零配置的事务性SQL数据库引擎(官 ...

  3. 学python需要什么基础知识-学习python需要什么基础

    Python是一门高级编程语言,而且Python语言适合零基础人员学习,也是初学者的首选. 学习python之前,需要掌握一些前端的知识,如html,css,js等,因为不管是做爬虫还是做web开发, ...

  4. 学python需要什么基础知识-学习Python需要知道哪些基础入门知识?

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python就业前景广阔.很多 ...

  5. python基础知识学习笔记(1)

    python 基础知识学习笔记(1) 总结一下Python基础知识,以防忘记. 文章目录 python 基础知识学习笔记(1) 一.起步 1.python安装与编译环境 二.变量和简单数据类型 三.列 ...

  6. Python基础知识学习笔记(一)

    Python基础知识学习笔记(一) 文章目录 Python基础知识学习笔记(一) (一) 认识python 1.注释 2.变量及类型 3.关键字(标识符) (1)什么是关键字? (2)查看关键字 (3 ...

  7. python基础知识资料-学习Python列表的基础知识汇总

    千里之行,始于足下.要练成一双洞悉一切的眼睛,还是得先把基本功扎扎实实地学好.今天,本喵带大家仔细温习一下Python的列表.温故而知新,不亦说乎. 当然,温习的同时也要发散思考,因为有些看似无关紧要 ...

  8. Python 基础知识学习笔记——NumPy

    Python基础知识学习笔记--NumPy 与 matlab 优秀的矩阵运算类似,python 提供了 numpy 库,这对熟悉 matlab 的用户来说非常友好.向量.矩阵和多维数组是数值计算中必不 ...

  9. Python 基础知识学习笔记——OpenCV(1)

    Python 基础知识学习笔记--OpenCV(1) OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,它轻量而且高效,被广泛的使用. 整理一下OpenCV学习笔记,以防忘记. 文章目录 Py ...

最新文章

  1. 如何判断两个单向链表是否有相交,并找出交点
  2. sql中存储过程打印返回的记录集
  3. 英语口语-文章朗读Week8 Friday
  4. java5 ReadWriteLock用法--读写锁实现
  5. 这家中国企业和星巴克对着干 年亏16亿却成为全球最快上市公司
  6. 这个世界上不存在什么弯道超车,只存在正道超车
  7. 学python可以做什么职业-学了Python,就能拿下这 7 个高薪的未来职业
  8. Beta阶段第1周/共2周 Scrum立会报告+燃尽图 06
  9. oracle lead_lag wm_concat,oracle函数 lag()和lead()
  10. 【转载】教你使用 Reflexil 反编译.NET
  11. python3 爬虫
  12. sony android电视软件,Sony TV Remote app
  13. mac Axure下载并汉化
  14. lzg_ad:XPE中EWF组件
  15. 高校后勤管理系统Java项目-基于SSM
  16. 【聊透SpringMVC】28天肝完阿里面试通关宝典
  17. 1那智机器人主电连接
  18. matlab语法 axis on,matlab axis
  19. Elasticsearch:从写入原理谈写入优化
  20. 谁再说不熟悉 Linux 命令,就把这个给他扔过去!

热门文章

  1. 2款实用的Excel可视化插件,建议收藏!
  2. [技术博客]使用微信机器人监听群内招聘信息的过程及遇到的问题
  3. [译]C++ 协程:理解 co_await 运算符
  4. 全方位体验Windows的日历功能
  5. I9 9900K线程_彗星降落人间——Intel第十代台式机酷睿处理器评测之I9篇
  6. 计算机中的数据是一个广义的概念,广义数据结构
  7. [笨木头FireFly 03]完整的服务端和客户端通信
  8. 利用ADS、HFSS设计微带带通滤波器的设计日志
  9. android zuk彩蛋,联想ZUK Z2你真的会玩吗?来看U-Touch 2.0的那些小彩蛋
  10. Valve(维尔福软件公司) Half Life(半条命) CS(反恐精英)