文档章节

[Python]轻量好用的数据库 SQLite3

 青衫游侠
发布于 2015/02/13 19:04
字数 1298
阅读 63
收藏 1

      最近的小项目要用到数据库,但是数据量又不是特别多,用postgreSQL, MySQL又显得太麻烦。知道Python自带一个轻量化的数据库SQLite,拿来用了一用,性能和效果都不错。


一,数据库安装和新建

import sqlite3

con = sqlite3.connect('/tmp/test.db')

上面的代码就完成了SQLite3数据库的安装,和新数据库的创建。注意connect后面的括号里是字符串,包含想要创建数据库的路径。如果数据库已经存在,则意味着打开这个数据库。


二,数据库操作

      python里的数据库都是通过“游标”(cursor)来完成的。在对目标数据库进行读写前,需要先定义一个游标,然后通过游标来对数据库进行操作,execute后面跟的就是SQL语言命令:

cur = con.cursor()
cur.execute('CREATE TABLE foo (o_id INTEGER PRIMARY KEY, fruit VARCHAR(20), veges VARCHAR(30))')

       下面引用的是数据库游标的描述:

        游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL  选择语句相关联。因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功, 该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

        我们知道关系数据库管理系统实质是面向集合的,在Sqlite中并没有一种描述表中单一记录的表达形式,除非使用where  子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select  返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。


三, 数据库事务提交

        对数据库的操作后,需要将操作后的变动提交到数据库。这时候要用到刚刚新建/打开数据库时候用到的数据库连接对象了。以下是几个常用的数据库对象操作。

cur.commit() #事务提交
cur.rollback() #事务回滚
cur.close() #关闭一个数据库连接
cur.cursor() #创建一个游标

        

四,获取查询结果

      数据库使用查询语句返回的结果,保存在fetchall() 等函数里面。常用的有下面几个:

cur.fetchall() #返回全部结果
cur.description() #表结构描述
cur.fetchone() #最后一个结果


五,Python数据库自定义操作

      像我这样数据量不大,偶尔查询/写入一下,而且又想偷懒的话,可以自定义一个函数,将要做的动作包含到函数,留一个变量接受SQL语句就好了:

def sql_cmd(req):
    DB_PATH = os.path.join(PATH, "IP.db")
    cx = sqlite3.connect(DB_PATH)
    cu = cx.cursor()
    cu.execute('%s' % req)
    cx.commit()
    return cu.fetchall()

这样,我在Python中操作数据库的时候,只需要直接使用仿SQL语句就好了:

sql_cmd('SELECT * FROM tables')

sql_cmd('CREATE table D_%s (ID INTEGER PRIMARY KEY, IP_Address text UNIQUE NOT NULL, User text DEFAULT "%s", Password text DEFAULT "%s", TimeStamp NOT NULL DEFAULT "%s")' % (GroupName.get(), BMC_USER.get(), BMC_PSW.get(), Current_Time.get()))


六,常用数据库操作语句:

创建表 CREATE TABLE

修改表 ALTER TABLE

删除表 DROP TABLE

主键 PRIMARY KEY

默认值 DEFAULT

非空 NOT NULL

唯一 UNIQUE

条件检查 CHECK

外键 FOREIGN KEY

插入数据 INSERT INTO 表(列...) VALUES(值...)


修改数据 UPDATE 表 SET 列 = '新值' 【WHERE 条件语句】

删除数据 DELETE FROM 表 【WHERE 条件语句】

查找数据 SELECT 列... FROM 表

限制返回数量 SELECT 列... FROM 表 LIMIT 数量 OFFSET 位置

别名 SELECT 列 AS 别名,列 AS 别名 FROM

条件查询 SELECT 列 FROM 表 【WHERE 条件语句】

排序 ORDER BY 列 ASC (DESC)

区分 DISTINCT 列

分组 GROUP BY 列

逻辑运算符


七,逆序排列SQL查询表: 

只需要在查询的组名后加 desc 即可将结果以逆序形式显示出来。


在你的select中使用order by id desc

select * from table name order by id desc


id 可以是你表里的任意列,最好是主键


© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 6
码字总数 3498
作品 0
闵行
linux下的 python开发环境

1.安装搜狗 : (1)官网下载搜狗输入法,下载完成后,直接可以在ubuntu软件中心打开 (2)在langage support中install (3)all settings->text entry->input method->show current input source-......

tavenpy
2015/04/13
0
2
ubuntu中的django安装配置与操作

1 安装django,在安装前确保python已经安装,ubuntu中默认有安装的。我们只需要安装django即可,解压django压缩文件,进入解压后的文件夹,运行,python setup.py install即可安装django到p...

闵开慧
2012/09/27
0
0
python标准库00 学习准备

Python标准库----走马观花 python有一套很有用的标准库。标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以让编程事半功倍....

肖邦0526
2015/12/29
0
0
如何用Python+django 10分钟內作出一个blog

在suse11.2上使用django1.4.1搞了N久都没有完成这个使命,最后在window下搞定,所以环境,版本很重要: windows7 + python2.6 + django1.3.3 + sqlite32.4.1 Step1 >>> 建立 project 运行: ...

彼得
2012/10/19
0
1
《Head First Python》笔记 第九章 管理你的数据

这章省略太多,因为对前面的代码修改了很多,主要将数据处理移到使用数据库,后面学完再回头来看。 9. Manage Your Data: Handling Input ![在此输入图片描述][1] 利用Python的数据库API “数...

豆仔
2013/04/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Flask 开发填坑

插件的选择: flask-security 真的是个鸡肋啊。自带的页面,好丑。还不如用flask-login来做呢。

pearma
52分钟前
2
0
讲述下 :LVM逻辑卷管理遇到的问题

LVM学习逻辑卷管理创建逻辑卷遇到的问题 1 实验环境 系统 内核 发行版本 CentOS 2.6.32-754.2.1.el6.x86_64 CentOS release 6.10 (Final) 由于是最小化安装没有xfs命令,yum安装如下包支持此...

linuxprobe16
今天
1
0
day95-20180922-英语流利阅读-待学习

Hey Jude 半个世纪传唱不衰的背后故事 毛西 2018-09-22 1.今日导读 2004 年,The Beatles 被《滚石》杂志选为“历史上最伟大的 50 位流行音乐家的第一位”。这四名来自英国利物浦的男孩不仅对...

飞鱼说编程
今天
3
0
OSChina 周六乱弹 —— 放假前期焦虑症晚期

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享Matteo的单曲《Panama》: 《Panama》- Matteo 手机党少年们想听歌,请使劲儿戳(这里) @新垣吉衣OSC :我发现只要去有小朋友...

小小编辑
今天
325
10
wait()被notify()后,接着执行wait()后面的语句

wait()被notify()后,接着执行wait()后面的语句

noteman
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部