1.写在前面
Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它使用一个文件存储整个数据库,操作十分方便。它的最大优点是使用方便,功能相比于其它大型数据库来说,确实有些差距。但是性能表现上,SQLITE并不逊色。麻雀虽小,五脏俱全, sqlite 实现了多数 sql-92 的标准,比如说 transaction 、 trigger 和复杂的查询等。
由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。
Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。
在使用SQLite之前首先明确一些关于数据库和数据库操作的基本概念
- 表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,比如学生的表,班级的表,学校的表,等等。表和表之间通过外键关联。
- 要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connection
- 连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果。
python的sqlite3数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本上都是下面几步:
- 用connect创建数据库
连接对象
为con, 用cursor创建游标对象
cur - 通过cur.execute执行SQL语句 【create/insert/delete/select/update/drop】
- 关闭cur, conn
2.基本操作
配置
import sqlite3
## the database path and name
filepath = r'./data/datebese.db'
## tablename
tablename = 'table_test'
## connect to the database,create connect object and cursor object
def dbConnect():
conn = sqlite3.connect(filepath)
cur = con.cursor()
return conn, cur
## disconnect
def dbDisconnect(coon,cur):
cur.sursor()
conn.close()
增删查改操作
##增
def insertData(sensor_id, zigbee_id):
con, c = dbConnect()
c.execute('''CREATE TABLE IF NOT EXISTS sensorid_zigbeeid (
sensor_id CHAR(4) NOT NULL,
zigbee_id CHAR(4) NOT NULL UNIQUE,
PRIMARY KEY (sensor_id)
)''')
c.execute("INSERT INTO {0} VALUES (?, ?)".format(tablename), (sensor_id, zigbee_id))
con.commit()
print("insert {0}, {1} in table {2}".format(sensor_id, zigbee_id, tablename))
dbDisconnect(con)
## 删
## Delete a record in a table
def dropData(sensor_id):
con, c = dbConnect()
c.execute("DELETE FROM {} WHERE sensor_id = ?".format(tablename), (sensor_id, ))
con.commit()
print("Delete{0} and it's zigbee_id from database".format(sensor_id))
dbDisconnect(con)
##Delete a table
def dropTable():
con, c = dbConnect()
c.execute("DROP TABLE IF EXISTS {}".format(tablename))
con.commit()
print("drop {0} table".format(tablename))
dbDisconnect(con)
## 查
def getAllDataFromDB():
con, c = dbConnect()
data = c.execute('SELECT * FROM {}'.format(tablename))
print("(sensor_id, zigbee_id)")
for i in data:
print(i)
dbDisconnect(con)
print("have print all data from table {0}".format(tablename))
def getZigbeeidAndSensorid():
con, c = dbConnect()
data = c.execute("SELECT sensor_id FROM {0}".format(tablename))
r = [x for x in data]
dbDisconnect(con)
return r
## 改
def alterData(sensor_id, zigbee_id):
con, c = dbConnect()
c.execute("UPDATE {} SET zigbee_id = ? WHERE sensor_id = ?".format(tablename),
(sensor_id, zigbee_id))
con.commit()
print("update sensor_id: {0} , zigbee_id: {1}, ok".format(sensor_id,zigbee_id ))
dbDisconnect(con)
3.其他概念
3.1 主键&外键
- 主键是能确定一条记录的唯一标识
比如一条记录:学号、姓名 、专业 (学号是唯一,可以作为主键) - 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
一个表中,主键只能有一个,但是一个表可以有多个外键
3.2 longan-sqlite3 对sqlite3再封装