SQLite简介

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

功能特性

  • ACID事务
  • 零配置 – 无需安装和管理配置
  • 支持数据库大小至2TB
  • 比一些流行的数据库在大部分普通数据库操作要快
  • 独立: 没有额外依赖
  • 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等

数据类型

  • Typelessness(无类型)
  • 支持常用的数据库类型

python操作SQLite

Python2.5之后,内置了SQLite3,成为了内置模块

import sqlite3

创建/打开数据库

如果数据库不存在就会创建新的数据库

# 可以指定创建数据库的路径,比如可以写成sqlite3.connect(r"E:\DEMO.db")
con = sqlite3.connect("DEMO.db")

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

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

数据库连接对象

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

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

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

创建游标

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

cu=con.cursor()

游标对象有以下的操作:

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

CURD操作

创建表

sql = "CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY,name TEXT,age INTEGER)"
cu.execute(sql)
# or
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

添加数据

# ①:添加单条数据
data = "1,\'Desire\',5"
cu.execute(\'INSERT INTO test VALUES (%s)\' % data)
# ②:添加单条数据
cu.execute("INSERT INTO test values(?,?,?)", (6, "zgq", 20))
# ③:添加多条数据
cu.executemany(\'INSERT INTO test VALUES (?,?,?)\', [(3, \'name3\', 19), (4, \'name4\', 26)])

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

con.commit()

更新数据

# 方式一
cu.execute("UPDATE test SET name=? WHERE id=?", ("nihao", 1))
# 方式二
cu.execute("UPDATE test SET name=\'haha\' WHERE id=3")

con.commit()

删除数据

# 方式一
cu.execute("DELETE FROM test WHERE id=?", (1,))
# 方式二
cu.execute("DELETE FROM test WHERE id=3")

con.commit()

 

 id为1、3的数据都被删除了

查询数据

1、查询所有数据

cu.execute(\'select * from test\')
print(cu.fetchall())
[(1, \'Desire\', 5), (3, \'name3\', 19), (4, \'name4\', 26), (6, \'zgq\', 20)]

2、查询单条数据

cu.execute(\'select * from test\')
print(\'单条数据:\',cu.fetchone())
单条数据: (1, \'Desire\', 5)

3、查询多条数据

cu.execute(\'select * from test\')
print(\'多条数据:\',cu.fetchmany(3))
多条数据: [(1, \'Desire\', 5), (3, \'name3\', 19), (4, \'name4\', 26)]

事务提交、回滚

提交

con.commit()

回滚

con.rollback()

断开会话连接,释放资源

# 关闭游标
cur.close()
# 断开数据库连接
con.close()

 

版权声明:本文为zibinchen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zibinchen/p/15092930.html