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数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本上都是下面几步:

  1. 用connect创建数据库连接对象为con, 用cursor创建游标对象cur
  2. 通过cur.execute执行SQL语句 【create/insert/delete/select/update/drop
  3. 关闭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再封装