python 标准库 sqlite3 介绍(一)

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的用法。

创建数据库(的连接):

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

创建游标:

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

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

# 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

向表中加数据:

# 增加一行数据
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)

保存更改:

conn.commit()#提交更改

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

询:

# 查询
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)

本文分享自微信公众号 - Python编程 pyqt matplotlib(wsplovePython)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏崔庆才的专栏

Python 工匠:高效操作文件的三个建议

Python 工匠系列又来了,这次讲的是怎样高效地操作文件,推荐给大家。Python 工匠系列又来了,这次讲的是怎样高效地操作文件,推荐给大家。Python 工...

9020
来自专栏Python | Blog

Flask 环境搭建——补充

版权声明:Copyright © ...

8010
来自专栏机器学习算法与Python学习

Python 小技巧 | Windows 文件名非用反斜杠

在编程过程中,我们往往会遇到一个小麻烦——微软 Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠:

13510
来自专栏Hadoop实操

0680-5.16.1-impala-shell导出数据存在中文异常问题

Fayson在使用impala-shell -i hosts -d default -f test.sql -o test.txt, 导出结果数据时,发现执行S...

32510
来自专栏奔跑的键盘侠

Python——量化分析介绍(六)

写着写着,突然发现之前的标题“常用命令介绍”已经跟内容有点脱轨了,写的已经不只是命令了……

14420
来自专栏菲宇

python-k8sclient开发K8S

Client-go是kubernetes官方发布的调用K8S API的golang语言包,可以用来开发K8S的管理服务、监控服务,配合前端展示,就可以开发出一款...

20520
来自专栏菲宇

Django二级域名路由配置方案django-hosts

修改主机的hosts,以支持域名访问本地服务,且服务运行在80端口run server 0.0.0.0:80测试。

11620
来自专栏菲宇

Django实战-用户注册和登陆系统

每当我们开始一个新项目的时候,通常都会搭建一个全新、独立、隔离的项目环境,这样做的好处自然不必多说。有很多种建立项目虚拟环境的工具,使用比较普遍的是Python...

33940
来自专栏机器学习算法与Python学习

8200+ Star!Python学习的必备法宝,随查随用

大多数的cheatsheet都是简单的语法规则列表,如果你手头有一份cheatsheet会让你的工作效率大大提升。

8420
来自专栏菲宇

python之platform模块

python中,platform模块给我们提供了很多方法去获取操作系统的信息 如:

9220

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励