文档章节

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

 青衫游侠
发布于 2015/02/13 19:04
字数 1298
阅读 45
收藏 1
点赞 0
评论 0

      最近的小项目要用到数据库,但是数据量又不是特别多,用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
博文 5
码字总数 3498
作品 0
闵行
django项目中使用多个数据库的方法, 多个数据库的联用 以及多数据库时数据导入导出的方法

阅读目录 给每个app都可以单独的设置一个数据库 使用指定的数据库来执行操作 多个数据库连用时数据导入导出 正文内容 django项目中使用多个数据库的方法, 多个数据库的联用 以及多数据库时数...

鹅倌 ⋅ 04/16 ⋅ 0

Python爬取淘宝美女信息

Python爬取淘宝美女信息下载本地并同时存储mysql数据库,存储数据库用到了pymysql模块,sql语句简单好用,直接上代码,源码请点链接Python-Spiders文集。 简单介绍下爬取文件结构,使用Pytho...

博行天下 ⋅ 2017/11/30 ⋅ 0

Django 配置多数据库踩的坑,深夜填坑。不管你怎么使用makemigrations和migrate都是No changes detected in app 'xxxxx'的结果

有时候在一个项目中需要用到多个数据库,django做了很好的支持。下面我来讲一下我的项目中使用的多数据库配置。 首先是项目setting.py 接下来就是db_router.py怎么写了。一下方法是自强学堂提...

dxzou ⋅ 06/12 ⋅ 0

python实现简体中文和繁体相互转换

1. opencc-python 如果目录上的链接被屏蔽了,请手动复制 https://pypi.python.org/pypi/opencc-python/ 首先介绍opencc的python实现库,它具有安装简单,翻译准确,使用方便等优点。对于我们...

_周小董 ⋅ 05/14 ⋅ 0

Python Scrapy 爬虫(三):部署环境搭建

当我们的爬虫程序开发完成后,应该考虑的事情就是如何将我们的爬虫程序部署到我们的服务器上来运行了。 下面就以 CentOS 作为我们的爬虫程序的部署环境来介绍部署爬虫的第一步:部署环境搭建...

雨林_a1d6 ⋅ 05/29 ⋅ 0

node爬虫获取漫威超级英雄电影海报

昨天去看了《复联3》的首映,当我提前15分钟进入影院的时候, 看到了粉丝们取票的长队, 顿时有一种跨年夜的感觉... 最近看了node爬虫的一些知识, 这里用node爬取一下漫威官网的电影海报! 小结:...

木子昭 ⋅ 05/12 ⋅ 0

ipython和Jupyter Notebook

ipython ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和函数。学习ipython将会让我们以一种...

lvyz0207 ⋅ 05/24 ⋅ 0

年薪20万Python工程师进阶(1):Python 资源 + 经典练手项目

Python 越来越火爆,最近自己也在学习。整理下一些 Python 资料,和练手的项目。希望对你学习 Python 有所帮助。 1、入门阶段 1 Python 官网 Python 官网 The Python Tutorialdocs.python.o...

程序员八阿哥 ⋅ 05/11 ⋅ 0

大数据分析挖掘学习方向?数据分析师的就业前景怎么样?

加米谷数据分析挖掘课程明细,从理论到云端实操环境到项目实战,手把手教您从0掌握数据分析与挖掘技术,带您走进数据时代。 第一阶段(python基础) python入门:1、Python版本特性介绍2、P...

加米谷大数据 ⋅ 04/17 ⋅ 0

【Python搞搞轻量Blog】第一发 Flask入门

大家好,我是仙宇(其实就是咸鱼) 我发现很多小伙伴一直想着有自己的一个博客,而且还想自己写一个。 你们都这么爱折腾,我就给你们搞一个轻量级级别的Blog. 准备 我们要用Python来写一套轻量...

仙宇 ⋅ 03/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 59分钟前 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 7

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部