python 003:操作SQLite3,增删改查

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值