栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python编程基础14:数据库编程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python编程基础14:数据库编程

文章目录
  • 一、关系数据库
    • (一)数据模型
      • 1、层次模型
      • 2、网状模型
      • 3、关系模型
      • 4、面向对象模型
    • (二)关系数据库的概念和特点
      • 1、基本概念
        • (1)关系
        • (2)二维表
        • (3)记录与字段
        • (4)关键字
        • (5)外部关键字
      • 2、关系数据库的基本特点
    • (三)关系数据库语言SQL
      • 1、创建和删除数据库
        • (1)创建数据库:使用create database语句
        • (2)删除数据库:使用drop database语句
      • 2、创建表
        • (1)创建表语句
        • (2)常用字段数据类型
        • (3)sql约束
      • 3、修改表
      • 4、删除表
      • 5、删除表中全部记录
      • 6、创建表索引
      • 7、创建视图
      • 8、执行查询
  • 二、访问SQLite数据库
    • (一)了解Python的SQL接口
      • 1、连接对象
      • 2、游标对象
      • 3、SQL查询结果
    • (二)连接和创建SQLite数据库
      • 1、创建数据库
      • 2、创建内存数据库
      • 3、创建临时数据库
      • 4、关闭数据库连接
    • (三)创建表
      • 1、通过连接对象创建表
      • 2、通过游标对象创建表
    • (四)添加记录
    • (五)执行查询
      • 1、使用游标对象的fetchall()方法提取全部查询结果
      • 2、使用游标对象来执行select语句
      • 3、使用循环来迭代fetchall()方法取回的数据
      • 4、使用fetchone()方法提取一条记录
      • 5、使用游标对象的fetchmany(n)方法提取记录
      • 6、获取字段名列表
    • (六)使用Row对象
      • 1、设置在查询结果生成Row对象
      • 2、将一个Row对象转换成列表、元组、字典
      • 3、返回字段列表
      • 4、按索引或字段名获取行对象的值
      • 5、通过循环输出Row对象

数据库通常用于存储和处理程序中的大量数据,数据库中的数据按照一定的模型进行组织和存储。常用的一些数据库,如Microsoft SQL Server、Microsoft Access、Microsoft
FoxPro、Oracle、MySQL、SQLite等,都属于关系数据库。关系数据库中的数据按照关系模型进行存储。Python3.8内置的sqlite3提供了SQLite数据库访问功能。借助于其他的扩展模块,Python也可访问Microsoft SQL Server、Oracle、MySQL或其他的各种数据库。

一、关系数据库 (一)数据模型 1、层次模型
  • 层次模型采用树状结构表示数据之间的联系,树的节点称为记录,记录之间只有简单的层次关系。有且只有一个节点没有父节点,该节点称为根节点;其他节点有且只有一个父节点。
2、网状模型
  • 可以有任意多个节点没有父节点。一个节点允许有多个父节点。两个节点之间可以有两种或两种以上联系。
3、关系模型
  • 关系模型用二维表格表示数据及数据联系,是应用最为广泛的数据模型。目前,各种常用的数据库,如Microsoft SQL Server、Microsoft Access、Microsoft FoxPro、Oracle、MySQL、SQLite等,都属于关系模型数据库管理系统。
4、面向对象模型
  • 面向对象模型是在面向对象技术基础上发展起来一种的数据模型,它采用面向对象的方法来设计数据库。面向对象模型的数据库种存储对象以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点。
(二)关系数据库的概念和特点 1、基本概念 (1)关系

数据和数据之间的联系称为关系。

(2)二维表

关系数据库使用二维表来表示和存储关系,一个关系就是一个二维表。表中的行称为记录,列称为字段。一个数据库可以包含多个表。

(3)记录与字段

表中的一行称为一个记录。表中的列为记录中的数据项,称为字段。字段也称为属性或者列。每个记录可以包含多个字段,不同记录包含相同的字段(字段的值不同)。例如,用户表中的每个记录包含用户名、登录密码等字段。
关系数据库不允许在一个表中出现重复的记录。

(4)关键字

可以唯一标识一个记录的字段或字段组合称为关键字。一个表可有多个关键字,其中用于标识记录的关键字称为主关键字,其他的关键字可称为候选关键字。一个表只允许有一个主关键字。例如,用户表中的用户名可定义为主关键字,在添加记录时,主关键字不允许重复。

(5)外部关键字

如果一个表中的字段或字段组合作为其他表的主关键字,这样的字段或字段组合称为外部关键字。

2、关系数据库的基本特点
  • 关系数据库中的表是二维表,表中的字段必须是不可再分的,即不允许表中表。
  • 在同一个表中不允许出现重复的记录。
  • 在同一个记录中不允许出现重复的字段。
  • 表中记录先后顺序不影响数据的性质,可以交换记录顺序。
  • 记录中字段的顺序不影响数据,可以交换字段的顺序。
(三)关系数据库语言SQL

SQL是Structured Query Language的缩写,即结构化查询语言,它是关系数据库的标准语言。Microsoft SQL Server、Microsoft Access、Microsoft FoxPro、Oracle、MySQL、SQLite等各种关系数据库均支持标准的SQL语言,但各种关系数据库具体在实现SQL时可能有所差别。

1、创建和删除数据库 (1)创建数据库:使用create database语句
create database testdb

testdb为创建的数据库名称。

(2)删除数据库:使用drop database语句
drop database testdb
2、创建表 (1)创建表语句
  • 在数据库中创建表使用create table语句,其基本格式为:create table 数据库名.表名(字段名1 字段数据类型(长度) sql约束,…..)

  • 在指定了“数据库名”时,创建的新表属于指定数据库,否则新表属于当前数据库。

(2)常用字段数据类型
数据类型说明
integer(size)
int(size)
smallint(size)
tinyint(size)
保存整数,size指定数字的最大位数
decimal(size, d)
numeric(size, d)
保存小数,size指定数字的最大位数,d指定小数的最大位数
char(size)保存固定长度的字符串(字母、数字以及特殊字符),size指定字符串的长度
varchar(size)保存可变长度的字符串(字母、数字以及特殊字符),size指定字符串的长度
date保存日期
  • 最简单的create table命令只指明表名、字段名和数据类型。例如:create table users(name varchar(10), birth date)
(3)sql约束
  • 用于为表或字段定义约束条件,常用的约束有:NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK、DEFAULT(不区分大小写,习惯在SQL语句中将SQL的关键字用大写)。可同时使用为字段定义多个约束。
3、修改表
  • 修改表使用alter table语句,前面已在修改或删除约束时使用到了该语句。修改表的其他操作通常包括修改表名称、添加字段、修改字段名、修改字段数据类型和删除字段等。
4、删除表
  • 删除表使用drop table语句:drop table users
5、删除表中全部记录
  • 删除表中全部记录使用truncate table语句:truncate table users
6、创建表索引
  • 表索引可以按索引字段对记录进行排序,查询索引字段比非索引字段的速度更快。
  • create index语句用于创建索引。
create index index_on_name on users(name)
7、创建视图
  • 视图是数据库中预定义的查询,创建视图使用create view语句。
create view user_age as select name, age from users
8、执行查询
  • select语句用于执行查询,查询结果存储在一个表中(称为查询结果集)。
SELECT 输出字段列表
   FROM 表名称
   [GROUP BY 用于分组的字段列表]
   [WHERe 筛选条件表达式]
   [ORDER BY 排序字段列表 [DESC|ASC]]
功能实现
返回表中的全部字段用星号可表示返回表中的全部字段。select * from users
返回表中的指定字段在需要返回个别字段时,在输出字段列表中包含这些字段,用逗号分隔。select name, age from users
为字段指定输出名称默认情况下,查询结果集中字段名与输出字段同名,可以用as为输出字段命名。select name as “用户名”, age as “年龄” from users
返回唯一值使用关键词DISTINCT可去掉返回记录中的重复值。select DISTINC Tname from users
使用where子句where子句用于指定筛选条件,满足条件的记录才会出现在查询结果集中。select * from users where age<20
运算符或函数==, >, <, >=, <=, !=
between…and…
in (…)
like, not like
isnull()
not, and, or
sum(), avg(), max(), min(), count()
对查询结果排序order by子句用于指定排序字段,查询结果默认按升序(ASC)排序,使用DESC表示降序。
例如:select * from users oder by age
select * from users oder by age DESC
可以使用多个排序字段,并分别指明排序方式。
例如,下面的语句按name升序,age降序对查询结果排序:
select * from users oder by name ASC, age DESC
二、访问SQLite数据库

SQLite是Python自带的唯一的关系数据库包,其他的关系数据库则需要通过第三方扩展来访问。Python的API规范定义了底层Python脚本和数据库的访问SQL接口,各种关系数据库在实现Python的SQL接口可能不会遵循Python规范,但与差异很小。

(一)了解Python的SQL接口 1、连接对象

连接对象用于创建数据库连接,所有的数据库操作均通过连接对象与数据库完成交互。连接对象生成游标对象。

2、游标对象

游标对象用于执行各种SQL语句:create table、update、insert、delete、select等。通常连接对象也可执行各种SQL语句。一般返回select语句都使用游标对象来执行,查询结果保存在游标对象中。

3、SQL查询结果

从游标对象中提取的查询结果时,单个记录表示为元组,多个记录则用包含元组的列表表示。在Python脚本中,进一步使用元组或列表操作来处理从数据库返回的查询结果。

(二)连接和创建SQLite数据库 1、创建数据库
  • 访问SQLite数据库时,需要先导入sqlite3模块,然后调用connect()方法建立数据库连接。
2、创建内存数据库
  • 如果使用“:memory:”表示文件名,Python会创建一个内存数据库。内存数据库中的所有数据均保存在内存中,关闭连接对象时,所有数据自动删除。

3、创建临时数据库
  • 如果使用空字符串作为文件名,Python会创建一个临时数据库。临时数据库有一个临时文件,所有数据保存在临时文件中。连接对象关闭时,临时文件和数据也会自动删除。
4、关闭数据库连接
  • 执行完所有操作后,应执行close()方法关闭连接对象,释放占用的资源。
(三)创建表

通过连接对象或游标对象的execute()方法执行create table语句创建表。

1、通过连接对象创建表
conn.execute('create table user(name varchar(10), gender varchar(2), age int(2))')

2、通过游标对象创建表

(四)添加记录
  • 通过连接对象或游标对象的execute()方法执行insert into语句创建表
  • 添加记录后,可使用游标对象的rowcount属性查看影响的记录行数
  • SQLite允许在insert into语句中使用问号表示参数,在execute()方法中用元组提供参数数据
  • 使用参数时,可以使用executemany()方法一次添加多条记录,记录数据用元组列表表示
  • 执行记录相关的修改操作(添加、删除或更新)时,应执行连接对象的commit()方法提交修改。如果没有执行commit()方法,关闭连接对象后,所有修改都会失效。
  • 连接对象的另一个方法rollback()可用于撤销最后一次调用commit()方法后所做的修改。
(五)执行查询 1、使用游标对象的fetchall()方法提取全部查询结果
  • 执行select语句可返回数据库中的数据。使用连接对象执行select语句时,返回包含查询结果的游标对象。游标对象的fetchall()方法提取全部查询结果。提取出的查询结果中,每条记录为一个元组,所有记录的元组组成一个列表。
  • 使用连接对象的execute()方法执行SQL语句

2、使用游标对象来执行select语句

3、使用循环来迭代fetchall()方法取回的数据

4、使用fetchone()方法提取一条记录
  • fetchone()方法可以每次提取一条记录,返回的记录为一个元组。在达到表位时,返回None。

5、使用游标对象的fetchmany(n)方法提取记录
  • fetchmany(n)方法可以每次提取n条记录。不指定参数时,返回一条记录。
6、获取字段名列表

(六)使用Row对象

Row对象可存储数据表中每行记录的字段名和数据。要在查询结果中返回Row对象,需要将连接对象的row_factory属性设置为“sqlite3.Row”,设置后,在游标对象的fetchX方法返回的数据中,每个记录为一个Row对象。可将Row对象转换为列表、元组、字典等序列对象。可对Row对象使用位置或字段名索引字段的值。Row对象的keys()方法可返回字段名列表。

1、设置在查询结果生成Row对象

2、将一个Row对象转换成列表、元组、字典


3、返回字段列表

4、按索引或字段名获取行对象的值

5、通过循环输出Row对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/675365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号