SQLite是一种用C写的小巧的嵌入式数据库,它的数据库就是一个文件。SQLite 不需要一个单独的服务器进程或操作的系统,不需要配置,这意味着不需要安装或管理,所有的维护都来自于SQLite 软件本身。
sqlite3模块不同于PyMySQL模块,PyMySQL是一个python与mysql的沟通管道,需要你在本地安装配置好mysql才能使用,而SQLite是python自带的数据库,不需要任何配置,使用sqlite3模块就可以驱动它。
废话不多说,直接上代码:
import sqlite3
# 打开数据库连接
try:
# db = pymysql.connect(host='localhost', user='root', passwd='', port=3306)
# db = pymysql.connect(host='localhost', user='root', passwd='', port=3306, db='hybdb') #1) 多个db
db = sqlite3.connect('Y:/D/_/_BaidiskDown/_Python/hyb007_sqlite3.db')
print('连接成功!')
except:
print('something wrong!')
# exit()
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
#----------> ① 查询数据库版本号
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT SQLITE_VERSION()") #2) Mysql是 SELECT VERSION()
data = cursor.fetchone() #3) 使用fetchone()取单条数据,即fetch one
print("Database version : %s " % data)
#----------> ② 创建user表
# 使用 execute() 方法执行 SQL,如果表存在则删除
rowcount = cursor.execute("DROP TABLE IF EXISTS `user`")
print(f"删除表成功! rowcount={rowcount}") #4) rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
# 但这里返回的是 <sqlite3.Cursor object>
# 使用预处理语句创建表
sqlCreateTabole="""CREATE TABLE `user` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`nam` varchar(255),
`age` int,
`des` varchar(255))""" #5) 在sqlite3中"INTEGER PRIMARY KEY AUTOINCREMENT"四个单词顺序不能错、且缺一不可
cursor.execute(sqlCreateTabole)
#----------> ③ 增
sqlInsert="INSERT INTO `user` VALUES (null, '张三', 21, '张三家住北京')"
try:
# 执行sql语句
cursor.execute(sqlInsert)
# 提交到数据库执行
db.commit() #6) 默认就开启了事务,所以一定要commit!
print('数据插入成功!')
except:
# 如果发生错误则回滚
db.rollback()
print('数据插入错误!')
sqlInsert2="INSERT INTO `user` VALUES (null, '李四', 22, '李四家住天津')"
sqlInsert3="INSERT INTO `user` VALUES (null, '王五', 23, '王五家住河北')"
try:
# 执行sql语句
cursor.execute(sqlInsert2)
cursor.execute(sqlInsert3)
db.commit()
print('数据插入成功!')
except:
db.rollback()
print('数据插入错误!')
#----------> ④ 查
sqlSelect="SELECT * FROM `user` \
WHERE `id` > %s" % 1 #7) 注意这个反斜杠的用法 #6) 注意 % 1 的用法
cursor.execute(sqlSelect)
rowList = cursor.fetchall() #7) fetchone()方法获取下一个查询结果集,结果集是一个对象。而fetchall():接收全部的返回结果行
for row in rowList:
id = row[0]
nam = row[1]
age = row[2]
des = row[3]
print("id=%d, name=%s, age=%d, des=%s" % \
(id, nam, age, des) \
) #8) 注意这个括号不能少!
# 关闭数据库连接
cursor.close()
db.close()
上面这84行代码,如果你能自己完整敲出来,那对数据库的增删改查以及事务处理都没有问题了,也就是说Python的SQLite3数据库操作,这一篇文章就够了!下面我再把代码中的8个细节点标注出来,你要细看这8点:
SQLite3扩展知识点:文章参考自获取SQLite最新版本及SQL语句解说
1)查询版本号:
sqlite3 -version 或者 SELECT SQLITE_VERSION()
2)如删除大量数据、想释放db文件占用的空间,执行:
vacuum;
3)可以为表 新增或删除一列
4)查询编码格式:
pragma encoding;
5)SQLite数据类型:NULL TEXT INTEGER REAL(浮点) BLOB(字节),但除这5种,也可接受:
smallint(16位整) integer(32位整) decimal(p,s)
float(32位浮点) double(64位浮点) char(n)但字串长n不可超过255
varchar(n)但n不可超过4k date(包含年月日) time(时分秒)
timestamp(年月日时分秒毫秒)
6)sqlite指令都以分号结尾,但两个 -- 表示注释。
7)SQLite内建函数:
7.1 算术函数:
abs(x) 取绝对值; max(x,y) 取最大值; random(*) 随机数; round(x[,y]) 按精度四舍五入
7.2 字符处理函数:
length(x) lower(x) upper(x) substr(x,y,z) randstr() quote(a) like(a,b) glob(a,b)
7.3 条件判断函数:
coalesce(x,y[,...]) ifnull(x,y) nullif(x,y)
7.4 集合函数:
avg(x) count(x) max(x) min(x) sum(x)
7.5 其它函数:
typeof(x)取数据类型 last_insert_rowid()取最后插入的ID change_count()取上一语句影响行数
last_statement_change_count()
7.6 有人说:成批插入操作时,启动事务比不启动,快n倍。另外尽量用参数化SQL,prepare
Hyb✈✈✈本文结束,谢谢浏览【VX:m3920752, QQ834659942】!个人资源的解压密码是: hyb