话不多说,直奔主题!
创建 CREATE
下面展示一些 内联代码片
。
//这里我创建一个数据库叫做sql_file.db
import sqlite3
conn = sqlite3.connect('sql_file.db')
cur = conn.cursor()
# 要注意的一点是ID里面的不能是int,只能是integer
sql = '''CREATE TABLE provinces
(ID INTEGER NOT NULL,
NAME TEXT NOT NULL,
NUMBER INT NOT NULL,
FAMOUS_FOOD TEXT NOT NULL,
PRIMARY KEY("ID" AUTOINCREMENT)
)'''
cur.execute(sql)
conn.commit()
conn.close()
增 INSERT
下面展示一些 内联代码片
。
// 插入数据后在同一个工程文件下的数据库在刷新后就会发生变化
import sqlite3
conn = sqlite3.connect('sql_file.db')
cur = conn.cursor()
# insert目前据我所知有两种方式:
sql1 = '''INSERT INTO provinces(ID, NAME, NUMBER, FAMOUS_FOOD)
VALUES(1, '广州', 1000, '烧麦')
'''
sql2 = '''INSERT INTO provinces(ID, NAME,NUMBER, FAMOUS_FOOD)
VALUES(?, ?, ?, ?)'''
data = (2, '北京', 2000, '北京烤鸭')
cur.execute(sql1)
cur.execute(sql2, data)
conn.commit()
conn.close()
删 DELETE
下面展示一些 内联代码片
。
// 虽然ID在创建的时候设置成是自增长的,但是你删除前面的ID数据后,后面的ID数据不会自动的给你减去一,依然是保持原样
import sqlite3
conn = sqlite3.connect('sql_file.db')
cur = conn.cursor()
sql = '''DELETE FROM provinces WHERE ID = 1'''
cur.execute(sql)
conn.commit()
conn.close()
改 UPDATE
下面展示一些 内联代码片
。
// 感觉数据库的语言有点像是英语语句,set和where的出现更便于我们理解
import sqlite3
conn = sqlite3.connect('sql_file.db')
cur = conn.cursor()
sql = '''UPDATE provinces SET NAME = '江西' WHERE ID = 2'''
cur.execute(sql)
conn.commit()
conn.close()
查 SELECT
下面展示一些 内联代码片
。
// 只有select后返回一个列表,这个时候执行的语句前要加上一个对象,就比我我这里的consequence
import sqlite3
conn = sqlite3.connect('sql_file.db')
cur = conn.cursor()
sql = '''SELECT ID, NAME, NUMBER, FAMOUS_FOOD FROM provinces'''
consequence = cur.execute(sql)
# select语句会返回一个列表
for row in consequence:
print('id = ', row[0])
print('name = ', row[1])
print('number = ', row[2])
print('famous_food = ', row[3], '\n')
conn.close()
几种SQLite数据类型
我们在创建字段的时候(字段就是create里面的概括,在我这个例子中有ID,name,number和 famous_food,这些就被叫做字段),会发现要填上字段的数据类型,以下是一些数据类型的分析:
NULL 值是一个 NULL 值。
INTEGER 值是一个带符号的整数
REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
TEXT 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
BLOB 值是一个 blob 数据,完全根据它的输入存储。
下面的是有关数据类型的用法:
(我觉得没有必要了解,只要懂得上面数据类型的意思就OK啦)
TEXT 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。
NUMERIC 当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。
INTEGER 对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。
REAL 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。
NONE 不做任何的转换,直接以该数据所属的数据类型进行存储。
对于blob,我稍微有点在意,因为我不知道他是什么意思。有网友解释道:
**BLOB (binary large object)----二进制大对象,是一个可以存储二进制文件的容器。**在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
简而言之,blob对象在SQLite中也是被称为一种数据类型,它可以以二进制的方式存储一些大的文件比如说是图片或者是音频文件。