[学习收藏]SQLite数据库操作学习

用Python进行SQLite数据库操作

原文参见:http://www.cnblogs.com/yuxc/archive/2011/08/18/2143606.html

简单的介绍

      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就是一个数据库连接对象,它可以有以下操作:

  1. commit()--事务提交    
  2. rollback()--事务回滚   
  3. close()--关闭一个数据库连接   
  4. cursor()--创建一个游标

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

 

4.使用游标查询数据库

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

cu=cx.cursor()

 

     游标对象有以下的操作:

  1. execute()--执行sql语句   
  2. executemany--执行多条sql语句   
  3. close()--关闭游标   
  4. fetchone()--从结果中取一条记录,并将游标指向下一条记录   
  5. fetchmany()--从结果中取多条记录   
  6. fetchall()--从结果中取出所有记录   
  7. 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

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]: <sqlite3.Cursor object at 0x05666680>

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

In [34]: type(r)
Out[34]: <type 'sqlite3.Row'>

In [35]: r
Out[35]: <sqlite3.Row object at 0x05348980>

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'

 

 

转载请注明出处:http://www.cnblogs.com/haochuang/ 8年IT工作经验,5年测试技术与管理,2年产品与项目管理,曾参与过云计算\云存储\车联网产品研发工作; 业余自媒体人,有技术类垂直微信公众号;如有招聘或求职方面需求,请Mail to uetest@qq.com ;或通过 QQ:363573922 微博:@念槐聚 联系;

时间: 2024-10-28 15:37:43

[学习收藏]SQLite数据库操作学习的相关文章

SQLite数据库操作实践

 SQLite数据库操作实践 SQLite存储类型 null - 空值  integer - 有符号整数,自增列定义 id integer primary key autoincrement real - 浮点数,存储为8-byte IEEE浮点数  text - 文本字符串 使用数据库编码(UTF-8, UTF-16BE 或 UTF-16LE)进行存储 blob - 二进制数据,如图片.声音等等  也可以接受其它数据类型例如datetime,varchar,nvarchar,decimal,f

Android SQLite数据库操作代码类分享_Android

使用示例: package cn.hackcoder.beautyreader.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by hackcoder on 15-1-25. */ public clas

SQLite数据库操作详细示例

MainActivity如下: package cc.testdb; import java.util.List; import cc.database.DBUtils; import cc.domain.Person; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.vi

Android中SQLite数据库操作

一.基础知识: 1.SQLite的数据类型: NULL:空值. INTEGER:带符号的整型,具体取决有存入数字的范围大小. REAL:浮点数字,存储为8-byte IEEE浮点数. TEXT:字符串文本. BLOB:二进制对象. smallint 16位元的整数. interger 32位元的整数. decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数.如果没有特别指定,则系统会设为 p=5; s=0 . floa

Android SQLite数据库操作代码类分享

使用示例: package cn.hackcoder.beautyreader.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by hackcoder on 15-1-25. */ public clas

从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCode进行IOS程序的开发,介绍使用FMDB对Sqlite数据库进行操作,以及对数据库操作类进行抽象设计,以期达到重用.简化.高效开发的目的. 在.NET领域开发了很多年,一般常见的项目都需要操作数据库,包括有Oracle.SqlServer.Mysql.Sqlite.Access等数据库,这些数据库是

使用iOS原生sqlite3框架对sqlite数据库进行操作

使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言       sqlite数据库是一种小型数据库,由于其小巧与简洁,在移动开发领域应用深广,sqlite数据库有一套完备的sqlite语句进行管理操作,一些常用的语句和可视化的开发工具在上篇博客中有介绍,地址如下: sqlite数据库常用语句及可视化工具介绍:http://my.oschina.net/u/2340880/blog/600820.       在iOS的原生开发框架中可以对sqlite数据库进行很好的支持,这个

[Android] SQLite数据库之增删改查基础操作

    在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Unix等主流操作系统,同时能够跟很多程序语言如C#.PHP.Java等相结合.下面先回顾SQL的基本语句,再讲述Android的基本操作. 一. adb shell回顾SQL语句     首先,我感觉自己整个大学印象最深的几门课就包括<数据库>,所以想先回顾SQL增删改查的基本语句.而在Androi

js+html5操作sqlite数据库的方法_javascript技巧

本文实例讲述了js+html5操作sqlite数据库的方法.分享给大家供大家参考,具体如下: //copyright by lanxyou lanxyou[at]gmail.com var lanxDB=function(dbname){ var db=openDatabase(dbname,'1.0.0','',65536); return{ //返回数据库名 getDBName:function(){ return dbname; }, //初始化数据库,如果需要则创建表 init:func