SQLite数据库操作学习

简介:

对SQLite3的操作部分实践记录一下:

1.下载;

官网下载地址:http://www.sqlite.org/download.html
32位安装包:http://www.sqlite.org/2016/sqlite-tools-win32-x86-3130000.zip
64位补丁:http://www.sqlite.org/2016/sqlite-dll-win64-x64-3130000.zip


2.安装:解压之后,将64位补丁包dll文件与exe文件放在相同目录下即可

3.使用:
sqlite3 .exe 才438KB 用它打开.db文件。方法如下:
把sqlite3 .exe 放到D:/下面. 把test.db文件放在D:/A 目录下

1>进入到要打开的*.db目录下,操作:
cd /d C:\Users\Administrator\AppData\Roaming\HAOCHUANG\Temp\dcmdb\6ac09ac3.fe31.4b51.b31b.14816ffb60c
dir 可见:imageremotetest.db

2.使用绝对路径运行并打开db文件:
"E:\Tools_PKG\DevTools\DBTools\sqlite-tools-win32-x86-3130000\sqlite3.exe" imageremote.db

3.使用sqlite命令操作数据库:
>.table --查看表名
>select * from test limit 1,100 --查看1到100条记录

sqlite> .dbinfo
database page size: 1024
write format: 1
read format: 1
reserved bytes: 0
file change counter: 366
database page count: 2927
freelist page count: 0
schema cookie: 10
schema format: 4
default cache size: 0
autovacuum top root: 0
incremental vacuum: 0
text encoding: 1 (utf8)
user version: 0
application id: 0
software version: 3009001
number of tables: 5
number of indexes: 10
number of triggers: 0
number of views: 0
schema size: 5016
sqlite> .table
t_frame_info t_image_info t_patient t_series_info t_study_info 
sqlite> .databases
seq name file 
--- --------------- ----------------------------------------------------------
0 main C:\Users\Administrator\AppData\Roaming\LifeccpTemp\dcmdb\6
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
   ....: 
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,
   ....: 
10  鱼 Yu
复制代码

 使用列的关键词查询

In [ 43 ]: r[ ' id ' ]
Out[
43 ]: 0

In [
44 ]: r[ ' name ' ]
Out[
44 ]: u ' \u9c7c '

 


本文转自 念槐聚 博客园博客,原文链接:http://www.cnblogs.com/haochuang/archive/2011/12/01/2269929.html,如需转载请自行联系原作者

相关文章
|
3天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
50 15
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
38 8
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
36 4
|
2月前
|
SQL NoSQL 关系型数据库
数据库学习
【10月更文挑战第8天】
27 1
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
82 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
147 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
56 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
64 3
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。