前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 标准库 sqlite3 介绍(一)

python 标准库 sqlite3 介绍(一)

作者头像
用户6021899
发布2019-08-14 17:02:09
1.3K0
发布2019-08-14 17:02:09
举报

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的功能特点有:

1. ACID事务

2. 零配置 – 无需安装和管理配置

3.储存在单一磁盘文件中的一个完整的数据库

4.数据库文件可以在不同字节顺序的机器间自由的共享

5.支持数据库大小至2TB

6. 足够小, 大致13万行C代码, 4.43M

7. 比一些流行的数据库在大部分普通数据库操作要快

8. 简单, 轻松的API

9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

10. 良好注释的源代码, 并且有着90%以上的测试覆盖率

11. 独立: 没有额外依赖

12. 源码完全的开源, 你可以用于任何用途, 包括出售它

13. 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等

sqlite3 是SQLite的python接口,由Gerhard Häring编写,属于python的标准库,无需额外安装。下面介绍sqlite3的用法。

创建数据库(的连接):

代码语言:javascript
复制
import sqlite3
conn = sqlite3.connect('动物记录.db')#到磁盘,#无则新建,有则连接
#conn = sqlite3.connect(":memory:")#在内存中创建临时数据库,存取速度极快

创建游标:

代码语言:javascript
复制
# 对于数据库的表的操作是通过游标进行的,所以在操作之前要获取游标对象
c = conn.cursor()

创建表(可以创建多个):

代码语言:javascript
复制
# IF NOT EXISTS 表示 仅当表不存在时才创建
#PRIMARY KEY 主键约束(值唯一)
#NOT NULL 值非空约束
c.execute('''CREATE TABLE IF NOT EXISTS pets 
             (id INTEGER PRIMARY KEY, name TEXT , type TEXT NOT NULL, sex CHAR(1), weight real)''')

sqlite 和 python的数据类型对照表:

更多的SQL的 语法请参考下面的链接:https://www.runoob.com/sqlite/sqlite-syntax.html

向表中加数据:

代码语言:javascript
复制
# 增加一行数据
c.execute("INSERT INTO pets VALUES (1,'Tom', '猫', 'male', 5)")
#可以只给定部分值,未给定值的为Null(当然,有非空约束的不能为空), 对应python类型 None
c.execute("INSERT INTO pets(id, name, type) VALUES (2,'喜洋洋', '羊')")

#可以用普通的 python 字符串格式化:
c.execute("INSERT INTO pets VALUES (3, '%s', '兔', '%s', 2.5)" %("Peter", "female"))
c.execute("INSERT INTO pets VALUES (4, '{}', '猪', '{}', 2.5)" . format("佩奇", "male"))
#'my name is {} ,age {}'.format('hoho',18)

#还可以是 execute()带两个参数,"?" 做 占位符
c.execute("INSERT INTO pets VALUES (5, ?, ?, 'male', 0.5)" ,  ["Jerry", "鼠"])
records =[ [8,'吉吉', 'monkey', 'male', 30],
            [9,'熊大', 'bear', 'male', 300],
            [10,'熊二', 'bear', 'male', 280]]
# 增加多行数据
c.executemany("INSERT INTO pets VALUES (?, ?,?,?,?)", records)

保存更改:

代码语言:javascript
复制
conn.commit()#提交更改

#关闭与数据库的连接
#conn.close()
#不能操作已关闭的数据库,报错:sqlite3.ProgrammingError: Cannot operate on a closed database.
#必须重新建立与数据库的连接
#conn = sqlite3.connect('动物记录.db')
#c = conn.cursor()

询:

代码语言:javascript
复制
# 查询
c.execute("SELECT * FROM pets")
print(c.fetchone()) #查询一条记录
print(c.fetchmany(3))#查询(剩余)多条记录
print(c.fetchall())#查询(剩余)全部记录
print()

#查询部分列
for row in c.execute("SELECT name,weight FROM pets"):
    print(row)
print()

#条件查询
c.execute("select * from pets where weight > ?", (15, ))
print(c.fetchall())

#多条件查询
c.execute("select * from pets where weight <= ? and sex = ? ", (15, "female")) # 与
print(c.fetchall())
c.execute("select * from pets where weight <= ? or sex = ? ", (15, "female")) #或
print(c.fetchall())

#查询统计数据
c.execute("select count(*) from pets where sex = ? ", ( "male", )) #求数量
n =c.fetchone()[0];  print("count: ", n)
c.execute("select AVG(weight) from pets where sex = ? ", ( "male", )) #求平均值,自动忽略空值
avg = c.fetchone()[0]; print("average: ", avg)
c.execute("select Max(weight) from pets where sex = ? ", ( "male", )) #求最大值,自动忽略空值
print("Max: ", c.fetchone()[0])
c.execute("select Min(weight) from pets where sex = ? ", ( "male", )) #求最小值,自动忽略空值
print("Min: ", c.fetchone()[0])
#可以是计算式
c.execute("select (weight-%f)*(weight-%f) from pets where sex = ? "%(avg,avg) , ( "male", ))
sqr = c.fetchone()[0]
from math import sqrt
print("std: ", sqrt(sqr)/(n-1))

#排序
rows = c.execute("SELECT * FROM pets ORDER BY weight")#ASC(默认升序) ,DESC
for row in rows:
    print(row)
print()
#降序排列
rows = c.execute("SELECT * FROM pets ORDER BY weight DESC")#DESC
for row in rows:
    print(row)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档