Python操作SQLite数据库的方法详解

本文实例讲述了Python操作SQLite数据库的方法。分享给大家供大家参考,具体如下:

SQLite简单介绍

SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如
Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月.
至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

安装与使用

1.导入Python SQLITE数据库模块

    
Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~

    

import sqlite3



2. 创建/打开数据库



    
在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。

    

cx = sqlite3.connect("E:/test.db")



    
也可以创建数据库在内存中。

    

con = sqlite3.connect(":memory:")



3.数据库连接对象



   
打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:



① commit()--事务提交  

② rollback()--事务回滚  

③ close()--关闭一个数据库连接  

④ cursor()--创建一个游标



   
关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。

4.使用游标查询数据库



我们需要使用游标对象SQL语句查询数据库,获得查询对象。 通过以下方法来定义一个游标。



cu=cx.cursor()



游标对象有以下的操作:



① execute()--执行sql语句  

② executemany--执行多条sql语句  

③ close()--关闭游标  

④ fetchone()--从结果中取一条记录,并将游标指向下一条记录
 

⑤ fetchmany()--从结果中取多条记录  

⑥ fetchall()--从结果中取出所有记录  

⑦ scroll()--游标滚动



1. 建表



复制代码 代码如下:

cu.execute("create table catalog (id integer primary key,pid
integer,name varchar(10) UNIQUE,nickname text NULL)")



上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以及一个nickname默认为NULL。

2. 插入数据



请注意避免以下写法:  
 

# Never do this -- insecure 会导致注入攻击

pid=200

c.execute("... where pid = '%s'" % pid)



正确的做法如下,如果t只是单个数值,也要采用t=(n,)的形式,因为元组是不可变的。  
 

for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:

  cx.execute("insert into catalog values
(?,?,?,?)", t)



简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.  
 

cx.commit()



3.查询    

cu.execute("select * from catalog")



要提取查询到的数据,使用游标的fetch函数,如:

    

In [10]: cu.fetchall()

Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]



如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.



4.修改    

In [12]: cu.execute("update catalog set name='Boy' where id =
0")

In [13]: cx.commit()



注意,修改数据以后提交



5.删除    

cu.execute("delete from catalog where id = 1")

cx.commit()



6.使用中文



请先确定你的IDE或者系统默认编码是utf-8,并且在中文前加上u

    

x=u'鱼'

cu.execute("update catalog set name=? where id = 0",x)

cu.execute("select * from catalog")

cu.fetchall()

[(0, 10, u'\u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]



如果要显示出中文字体,那需要依次打印出每个字符串  
 

In [26]: for item in cu.fetchall():

  ....:   for
element in item:

 
....:    
print element,

  ....:  
print

  ....:

0 10 鱼 Yu

1 20 cba Xu



7.Row类型



Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有内存开销。 原文如下:



sqlite3.Row provides both index-based and case-insensitive
name-based access to columns with almost no memory overhead. It
will probably be better than your own custom dictionary-based
approach or even a db_row based solution.



Row对象的详细介绍



class sqlite3.Row

A Row instance serves as a highly optimized row_factory for
Connection objects. It tries to mimic a tuple in most of its
features.

It supports mapping access by column name and index, iteration,
representation, equality testing and len().

If two Row objects have exactly the same columns and their members
are equal, they compare equal.

Changed in version 2.6: Added iteration and equality
(hashability).

keys()

This method returns a tuple of column names. Immediately after a
query, it is the first member of each tuple in
Cursor.description.

New in version 2.6.



下面举例说明

    

In [30]: cx.row_factory = sqlite3.Row

In [31]: c = cx.cursor()

In [32]: c.execute('select * from catalog')

Out[32]:

In [33]: r = c.fetchone()

In [34]: type(r)

Out[34]:

In [35]: r

Out[35]:

In [36]: print r

(0, 10, u'\u9c7c', u'Yu')

In [37]: len(r)

Out[37]: 4

In [39]:
r[2]     
#使用索引查询

Out[39]: u'\u9c7c'

In [41]: r.keys()

Out[41]: ['id', 'pid', 'name', 'nickname']

In [42]: for e in r:

  ....:   print
e,

  ....:

0 10 鱼 Yu



使用列的关键词查询  
 

In [43]: r['id']

Out[43]: 0

In [44]: r['name']

Out[44]: u'\u9c7c'

Python操作SQLite数据库的方法详解的更多相关文章

  1. kafka实战教程(python操作kafka),kafka配置文件详解

    kafka实战教程(python操作kafka),kafka配置文件详解 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是 ...

  2. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  3. Python操作sqlite数据库小节

    学习了Python操作sqlite数据库,做一个小结,以备后用. import sqlite3import os# 进行数据库操作时,主要是参数如何传输try:# 链接数据库conn=sqlite3. ...

  4. Python 操作 SQLite 数据库

    写在之前 SQLite 是一个小型的关系型数据库,它最大的特点在于不需要单独的服务.零配置.我们在之前讲过的两个数据库,不管是 MySQL 还是 MongoDB,都需要我们安装.安装之后,然后运行起来 ...

  5. python操作sqlite数据库

    root@cacti:~/box# cat convert.py #!/usr/bin/env python import sqlite3,time,rrdtool,os def boxstatus( ...

  6. python 操作sqlite数据库

    '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...

  7. 8.1 使用Python操作SQLite数据库

    SQLite是内嵌在Python中的轻量级.基于磁盘文件袋额数据库管理系统,不需要安装和配置服务,支持使用SQL语句来访问数据库.该数据库使用C语言开发,支持大多数SQL91标准,支持原子的.一致的. ...

  8. Python 操作sqlite数据库及保存查询numpy类型数据(二)

    # -*- coding: utf-8 -*- ''' Created on 2019年3月6日 @author: Administrator ''' import sqlite3 import nu ...

  9. Python 操作sqlite数据库及保存查询numpy类型数据(一)

    # -*- coding: utf-8 -*- ''' Created on 2019年3月6日 @author: Administrator ''' import sqlite3 import nu ...

随机推荐

  1. MySQL-Utilities:mysqldbcompare及跳过复制错误

    mysqldbcompare也是MySQL-Utilities工具集的一个脚本.mysqldbcompare从两个数据库比较对象和数据的不同.数据库中的对象包括:表.视图.触发器.存储过程.函数和事件 ...

  2. 启发式搜索——A*算法

    启发式搜索 启发式搜索是一种对搜索到的每一个位置进行评估,然后从评估的最优位置进行搜索直到目的地, 由于搜索时对每一个位置的评估是基于直观或经验的所有叫启发式搜索 A*算法 历史: 1964年Nils ...

  3. [NOI2015] 软件包管理器【树链剖分+线段树区间覆盖】

    Online Judge:Luogu-P2146 Label:树链剖分,线段树区间覆盖 题目大意 \(n\)个软件包(编号0~n-1),他们之间的依赖关系用一棵含\(n-1\)条边的树来描述.一共两种 ...

  4. MYSQL实现列拼接,即同一个字段,多条记录拼接成一条

    一.首先,新建三张表 DROP TABLE IF EXISTS `article`; CREATE TABLE `article` ( `id` ) unsigned NOT NULL AUTO_IN ...

  5. sql server 获取指定格式的当前日期

    使用sqlserver日期函数中的getdate()可以获取当现的日期,下面就将为您介绍这种使用sqlserver日期函数获取当前日期的方法. 但是如果我们只需要得到当前的日期,不需要时间部分,或者不 ...

  6. ArcSDE 10.0与ArcSDE10.1的又一个区别

    ArcSDE10.0 安装后直接在创建sde表空间和sde用户的时候创建了sde服务:而sde10.1可以直接先通过ArcMap10.1直连数据库,创建sde表空间.sde用户.然后在有必要的情况下再 ...

  7. 匿名/局部内部类访问局部变量时,为什么局部变量必须加final

    我们都知道方法中的匿名/局部内部类是能够访问同一个方法中的局部变量的,但是为什么局部变量要加上一个final呢? 首先我们来研究一下变量生命周期的问题,局部变量的生命周期是当该方法被调用时在栈中被创建 ...

  8. 一键清理系统垃圾文件bat

    历史比较久远了,可做一定参考. @echo off echo 正在清理系统垃圾文件,请稍等...... del /f /s /q %systemdrive%*.tmp del /f /s /q %sy ...

  9. Python学习之字典--三级菜单

    效果图: 实现代码: dic = { '人物':{ '帽子':{'前年玄铁帽'}, '武器':{'屠龙宝刀'} }, '属性':{ '力量':{35}, '敏捷':{66} }, '任务':{ '主线 ...

  10. Java获取系统时间少了八个小时

    Java获取系统时间少了八个小时 今天忽然遇到需要获取当前时间的问题,我向来谨慎,先测试获取到的系统时间是否正确,结果竟然发现少了八个小时,晕死了,记得之前在页面用javascript获取过当前时间, ...