Python数据库入门(详细教程)
前言
可以毫不夸张的说,不懂数据库,不是真正的程序员。纷繁复杂,界面绚丽的程序,最本质的无非都是在操作数据而已。既然有数据,那就肯定需要一个东西去存放并管理这些数据,而数据库就是这么一个软件。
有些人可能没有直接接触过数据库,但我相信大部分人都用过Excel这种表格工具。实际上,它就相当于一个简单的数据库,与之相比,更贴切的可能是 Access数据库。
在学习数据库之前,我们先看看数据库到底长什么样子,得先有感性认识才行
这是MySql
数据库
这是Sqlite3
数据库
以上两个是主流的关系型数据库,我们观察之后发现,它们与我们熟知的Excel好像也没有什么不同。关系型数据库里面放的都是一张张的表,就如同Excel中的工作簿。就算不熟悉Excel,但每一张表也都是我们从小到大所熟悉的那种表结构,例如课程表、值日表之类的。
与Excel不同的是,数据库提供了快速的、高效的编程接口,可以让我们非常简洁、灵活的以代码去操作这个数据库,例如删除一条数据、新增一条数据、对数据进行排序,就想我们经常对价格、销量、好评排序那样。这些都是Excel无法比拟的。
SQL数据库
所谓数据库,即存储数据的仓库。每一个数据库可以存放若干个数据表,这里的数据表就是我们通常所说的二维表,分为行和列,每一行称为一条记录,每一列称为一个字段。表中的列是固定的,可变的是行。要注意,我们通常需要在列中指定数据的类型,在行中添加数据,即我们每次添加一条记录,就添加一行,而不是添加一列。对数据库的操作可以概括为就是向数据库中添加、删除、修改和查询数据,其中查询功能最为复杂。
先简单了解了一下数据库,接下来学习一下数据库相关的概念。
数据库SQL语言入门
SQL简介
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和设计语言,用于存取数据以及查询、更新和管理关系数据库系统.
简而言之,SQL就是一种脚本编程语言,是绝大多数数据库的通用语言。没错,刚学会Python,接下来又得学习新的语言……不过,对于非DBA(Database Administrator,数据库管理员)的开发人员而言,并不需要对SQL语言掌握得太深入,SQL的基本用法实际上是比Python还简单的。
SQL 的作用
SQL语句分类
DDL(data definition language)数据定义语言
主要是对数据库中的表以及表中的列等的定义和操作DML(data manipulation language)数据操纵语言
对数据库里的表中数据进行操作的语言DCL(Data Control Language)数据库控制语言
TCL(Transaction Control Language)事务控制语言
其中DDL和DML是最常用的语言,是重中之重,其他两种忽略
SQLite 数据库
SQLite 是一款轻型的嵌入式数据库,占用资源及其低,这是它受人青睐的原因之一,在嵌入式设备(如手机)中只需要几百 K 的内存即可。它不仅支持数据库通用的增删改查,还支持事务功能,功能还比较强大。
SQLite 数据库实际上就是一个文件,这个文件的后缀名通常是 .db,database的缩写,它的第一个版本诞生于 2000 年,最近版本为 SQLite3。
除了SQLite数据库,还有其他几种常见的数据库,例如Oracle、SQL Server、MySQL等等
这里我们选取SQLite
作为入门来学习数据库,因为它搭建非常简单,极容易上手。与之相比,其他的数据库都需安装,配置,启动服务等等操作。而Python在标准库已经自带了这种数据库。
SQLite 中的数据类型
数据库是存储数据的,它自然会对数据的类型进行划分,SQLite 划分有五种数据类型(不区分大小写)
NULL
类型,取值为 NULL,表示没有或者为空INTERGER
类型,取值为带符号的整数,即可为负整数REAL
类型,取值为浮点数TEXT
类型,取值是字符串BLOB
类型,是一个二进制的数据块,即字节串,可用于存放纯二进制数据,例如图片
DDL语句
简单说,其实主要就是用来创建表的,当然也可以删除表,或者修改表的定义,比如原表只有三列,现在需要五列,就要修改表的定义
- 概念理解
- 表: 可以理解为我们通常所说的二维表,分为横纵(行列),用于存放数据
- 字段: 就是表中的列名
- 主键: 就是一种特殊的列。每一行数据的主键不能相同,是这一行数据的唯一标识,就像人的身份证号
创建表
create table 表名称(列名1 类型 配置, 列名2 类型 配置, 列名3 类型 配置);
注意,SQL语言是不区分大小写的,create 也可以写成CREATE。另外,每一句SQL语句后面都需要一个;
号结尾
create table contacts (id integer primary key autoincrement,name text not null ,phone text not null default 'unknow');
primary key autoincrement
的意思是指将id
这个列定义为主键,并且从1开始自动增长,也就是说id
这个列不需要人为的手动去插入数据,它会自动增长。
not null
指明这一列不能为空,当你插入数据时,如果不插入name
或者phone
的值,那么就会报错,无法完成这一次插入。
create table if not exists stu_info(id integer primary key autoincrement,name text not null,number text);
如上所示,在建表语句中增加了一个if not exists
的判断,每次运行都会先判断,不存在才会执行后面的语句创建
删除表
drop table 表名称;drop table if exists 表名称;
修改表
/* 修改表名称 */
alter table 原表名 rename to 新表名;/* 添加新列 */
alter table 表名称 add column 列名 类型 配置
alter table contacts rename to students;
/* 添加字段,分多次添加 */
alter table contacts add column email text;
alter table contacts add column qq text not null;
在SQLite3中需要特别注意,由于其对SQL 语句支持不够彻底,因此不能一次添加多个字段,只能一次添加一个,如有多个字段需要添加,则需要多次执行添加语句一次添加一个。
DML语句
对数据库里的表数据进行相应的增、删、改、查的操作。注意,这里是表中的数据,而DDL则是对表的结构进行创建或修改,注意区分
添加
#想要插入的字段和值的顺序要一一对应起来
insert into 表名称 (字段1,字段2,字段3……) values (被插入的值1,值2,值3……)insert into 表名称 values(值1,值2,值3……)
要注意,使用简略的语句,必须插入全部字段,顺序对应,不能遗漏一个
insert into stu_info (name,number,age) values("zhangsan","20171220",20);
删除
delete from 表名称 where 字段 = 条件;# 用于删除表中所有数据,但不删除表
delete from 表名 或者 delete * from 表名
delete from stu_info where number = "20171221";
修改
update 表名称 set 字段1=值1,字段2=值2,…… where 字段 = 条件;
注意,此处值是你要修改的值,此语句可用来修改满足条件的一行或多行
update stu_info set name = "zhangsan",age=10 where number = "20171221";
查询
#查询的字段就是你要查询的列名,用*可表示查询全部字段
select 查询的字段 from 表名称 where 字段 = 条件;#查询整张表的所有数据
select * from 表名称;
select * from food_types where name = "apple"
select table1.abc from table1,table2 where table1.xxx=table2.xxx;
select table1.abc from table1 inner join table2 on table1.xxx=table2.xxx;
特别注意
SQL语句中,text类型的字符串常量需要用单引号或者双引号括起来,推荐使用单引号。
select * from stu_info where name = 'zhangsan'
以上也就是数据库中常说的所谓CRUD
操作(create、read、update、delete),分别代表对数据的增删改查。
在技术上很多术语词汇并不是没有来由出处的,因此大家不能根据英汉词典去望文生义。根据英文维基百科,CRUD(create, read, update, and delete )术语的出处,是James Martin在1983年的《管理数据库环境》一书中首次流行的
Python中的SQLite
操作SQLite
操作该数据库的大致步骤就是连接数据库,然后对数据库进行增删改查等操作即可。
- 导入模块
- 连接数据库,返回连接对象
- 调用连接对象的execute()方法,执行SQL语句,进行增删改的操作,如进行了增添或者修改数据的操作,需调用commit()方法提交修改才能生效;execute()方法也可用于执行DDL语句进行创建表的操作
- 调用连接对象的cursor()方法返回游标对象,然后调用游标对象的execute()方法执行查询语句,查询数据库
- 关闭连接对象和游标对象
# 导入模块
import sqlite3# 连接数据库,返回连接对象
conn = sqlite3.connect("D:/my_test.db")# 调用连接对象的execute()方法,执行SQL语句
# (此处执行的是DDL语句,创建一个叫students_info的表)
conn.execute("""create table if not exists students_info (
id integer primary key autoincrement,
name text,
age integer,
address text)""")# 插入一条数据
conn.execute("insert into students_info (name,age,address) values ('Tom',18,'北京东路')")# 增添或者修改数据只会必须要提交才能生效
conn.commit()# 调用连接对象的cursor()方法返回游标对象
cursor = conn.cursor()# 调用游标对象的execute()方法执行查询语句
cursor.execute("select * from students_info")# 执行了查询语句后,查询的结果会保存到游标对象中,调用游标对象的方法可获取查询结果
# 此处调用fetchall方法返回一个列表,列表中存放的是元组,
# 每一个元组就是数据表中的一行数据
result = cursor.fetchall()#遍历所有结果,并打印
for row in result:print(row)#关闭
cursor.close()
conn.close()
游标对象
调用连接对象的cursor()方法可以得到一个游标对象,那么游标到底是什么呢?其实可以把游标理解为一个指针,如下图:
# 调用游标对象的execute()方法执行查询语句
cursor.execute("select * from students_info")# 将游标移动到第一行
row = cursor.fetchone()# 当查询的结果集没有数据时,向下移动游标会返回空,如果不是空,说明有数据
if row !=None:print(row)
# 将游标移动到第一行
row = cursor.fetchone()# 如果返回的结果集第一行有数据,进入循环
while row != None:# 打印第一行结果print(row)# 将游标指针向下再移动一行row = cursor.fetchone()
result = cursor.fetchall()#遍历所有结果,并打印
for row in result:print(row)
#调用游标对象的execute()方法执行查询语句
cursor.execute("select * from students_info")#直接遍历cursor对象,并打印
for row in cursor:print(row)
SQLite防注入
对于某些特殊符号的数据,直接使用上述方法拼接字符串,可能会造成意想不到的错误,因此,应当使用另一种安全的,可防Sql注入攻击的方式插入数据。
cursor.execute("insert into students_info values (?,?,?)",
('Tom',18,'北京东路'))
这里的?
相当于占位符,execute
方法的第二个参数是一个元组,元组中的元素会替换掉占位符。注意,这里和字符串拼接是不同的,会进行sql
的预编译,可防止SQL注入
数据库可视化
归纳总结
execute()
执行sql语句,通常执行查询语句fetchone()
将游标指针向下移动一行,并返回当前行的数据fetchall()
从结果中取出所有结果,返回所有结果的列表close()
关闭游标
关于Python学习指南
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
Python数据库入门(详细教程)相关推荐
- python数据科学系列:pandas入门详细教程
导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...
- Pandas入门详细教程
作者:luanhz 来源:小数志 导读 本文主要是对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀"的盛誉. 行文二级目录 01 关于 ...
- 超完整 Python基础入门知识教程
本书旨在帮助Python开发人员发现该语言和相关库的突出特性,并编写简单.流畅.易于阅读和易于维护的代码.特别是生成器.属性描述符(ORM的键)和Python表达式的对象在数据库处理过程中的具体应用: ...
- spring入门详细教程(五)
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
- Spring入门详细教程(四)
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
- ThinkJS框架入门详细教程(二)新手入门项目
一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...
- Python 爬虫入门的教程(2小时快速入门、简单易懂、快速上手)
http://c.biancheng.net/view/2011.html 这是一篇详细介绍 Python 爬虫入门的教程,从实战出发,适合初学者.读者只需在阅读过程紧跟文章思路,理清相应的实现代码, ...
- numpy入门详细教程(一)
本讲主要介绍对numpy库和numpy库的N维数组对象:ndarray的基本了解.更多内容请看numpy入门详细教程(二) numpy: NumPy是一个开源的Python科学计算基础库,包含: • ...
- win七系统如何卸载MySQL_win7系统卸载SQL2008R2数据库的详细教程
用过SQL2008R2数据库的朋友都知道,安装起来容易卸起来麻烦,可是在win7 32位旗舰版系统就不知道怎么卸载SQL2008R2数据库了.其实卸载SQL2008R2数据库的方法也很简单,可直接通过 ...
- Spring入门详细教程(三)
前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...
最新文章
- Hawk使用补充说明
- pe文件被装入内存时按64k对齐
- springboot 初始化线程池_springboot项目中线程池的使用
- SCOM 如何监控生产环境中的LinuxUnix机器
- .net程序员安全注意代码及服务器配置
- 基于java二手书论文_java毕业设计_springboot框架的二手书交易管理与实现
- java jbutton 事件_java-需要JButton事件支持
- 编译是检查c语言,为什么CMake检查C编译器?
- 200个 jquery插件
- web项目中用户登录的具体流程
- 奇安信代码卫士报送的漏洞获评“CNVD平台2019年度最具价值漏洞”
- 父子页面(iframe)相互获取对方dom元素
- 【GMSK+FPGA】基于verilog的GMSK调制系统设计
- python中def main是什么意思_python - 为什么要使用def main()?
- Unity的拍照功能
- FreeRTOS 链表的深度讲解
- APICloud+vue+vant实现二维码扫码功能
- 3dmax渲染大图有斑点怎么办?
- 瑞芯微鸿蒙移植,鸿蒙内核liteos_a移植补丁-支持rk3126c rk3288 rv1126
- 中国省市区三级联动实例(AJAX实现)
热门文章
导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...
作者:luanhz 来源:小数志 导读 本文主要是对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀"的盛誉. 行文二级目录 01 关于 ...
本书旨在帮助Python开发人员发现该语言和相关库的突出特性,并编写简单.流畅.易于阅读和易于维护的代码.特别是生成器.属性描述符(ORM的键)和Python表达式的对象在数据库处理过程中的具体应用: ...
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...
http://c.biancheng.net/view/2011.html 这是一篇详细介绍 Python 爬虫入门的教程,从实战出发,适合初学者.读者只需在阅读过程紧跟文章思路,理清相应的实现代码, ...
本讲主要介绍对numpy库和numpy库的N维数组对象:ndarray的基本了解.更多内容请看numpy入门详细教程(二) numpy: NumPy是一个开源的Python科学计算基础库,包含: • ...
用过SQL2008R2数据库的朋友都知道,安装起来容易卸起来麻烦,可是在win7 32位旗舰版系统就不知道怎么卸载SQL2008R2数据库了.其实卸载SQL2008R2数据库的方法也很简单,可直接通过 ...
前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...