爬虫结果数据完整性校验

摘要:
数据完整性分为三个方面:1.域完整性(列)限制输入数据的类型、范围或格式。例如,性别字段必须是“男性”或“女性”,不允许插入其他数据。分数字段只能是0-100整数数据,电子邮件字段的内容必须符合邮箱的正则表达式。2.实体完整性(行)要求表中的所有行都具有唯一标识符。根据上述概念,从列、行和表的维度进行数据完整性验证。

数据完整性分为三个方面:

1、域完整性(列)

  限制输入数据的类型,及范围,或者格式,如性别字段必须是“男”或者“女”,不允许其他数据插入,成绩字段只能是0-100的整型数据,email字段的内容必须符合邮箱的正则表达式

2、实体完整性(行)

  要求表中的所有行都有一个唯一标识符。这个唯一标识符可能是一列,也可能是几列的组合,称为主键。也就是说,表中的主键在所有行上必须取唯一值。

3、参照完整性(表)

  参照完整性是基于外键与主键之间的关系,从表中的外键必须在主表中存在数据,不能引用主表中不存在的主键值,在输入更改或者删除主表数据时,从表需要联动变化,保证了数据的一致性。

根据以上概念,对于数据的完整性校验是从 “列”、“行”、“表” 的维度进行的。

有些约束是在建表的时候就已经根据数据库定义语言DDL语句进行了约束。

1、域完整性约束

  强制域完整性的方法有:限制类型(通过设定列的数据类型)、格式(通过CHECK约束和规则)或可能值的范围(通过FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOT NULL定义和规则)

2、实体完整性约束

  强制实体完整性的方法有:索引、UNIQUE约束、PRIMARY KEY约束或IDENTITY属性。

3、参照完整性约束

  强制参照完整性的方法有:主外键关系

校验点分析:

  可以看到其实实体完整性是肯定符合的,因为没有主键是不能建表的,参照完整性约束在建表时一般也会进行约束,校验的重点在于域完整性校验,即校验列数据的内容,有时候建表时不会增加CHECK约束(下面会举例),

所以不能保证入库的数据就是你想要的,假如没有约束性别字段只能为”男”或者“女”,而你又需要统计男女比例分布,万一爬虫数据写入了其他值,则统计结果肯定就不准确了。

例子:

CHECK约束(mysql)

在 "Persons" 表创建时在 "P_Id" 列上创建 CHECK 约束。CHECK 约束规定 "P_Id" 列必须只包含大于 0 的整数。

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)

域完整性校验实例:

使用robot framework编写的自动化测试脚本

*** Settings ***
Library           DatabaseLibrary
Library           re

*** Test Cases ***
域完整性校验
    [Documentation]    脚本解释:
    ...
    ...      1、连接数据库,读取主键id和email字段的值
    ...
    ...      2、遍历email的所有值,校验是否符合邮箱格式的正则表达式,如果不符合用例失败,打印错误信息
    Connect To Database Using Custom Params    pymysql    database='test_platform',user='root',password='guchen',host='192.168.202.80',port=3306
    ${table}    Set Variable    account_user
    ${primary_key}    Set Variable    id
    ${column}    Set Variable    email
    @{result}    Query    select ${primary_key},${column} from ${table}
    Log Many    @{result}
    : FOR    ${li}    IN    @{result}
        log    ${li[1]}    #${li[1]}为获取到的邮箱
        Run Keyword If    '${li[1]}' == ''    log    数据为空
        ...    ELSE    Should Match Regexp    ${li[1]}    ^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$    msg=${table}表中,${primary_key}为${li[0]}的行数据${column}字段的值:${li[1]}数据格式不正确,非邮箱格式。
        ...    #校验邮箱字段的值是否都符合邮箱格式

爬虫结果数据完整性校验第1张

脚本解释:

  1、连接数据库,读取主键id和email字段的值

  2、遍历email的所有值,校验是否符合邮箱格式的正则表达式,如果不符合用例失败,打印错误信息

免责声明:文章转载自《爬虫结果数据完整性校验》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇重定向请求用Anaconda3安装TensorFlow教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android Studio的串口通讯开发

基于android-serialport-api实现 前言RS232标准接口UARTRS232与UART转接下载 NDK 和构建工具创建支持 C/C++ 的新项目编译C/C++代码串口通讯原理关于校验位HexString与Bytes的转换参考 前言 软件代码写久了,总会对嵌入式开发感兴趣,因为软件的东西写来写去看不见摸不着,而嵌入式硬件开发,可以捣...

RAID 磁盘阵列 详解

RAID,RedundantArraysofIndependentDisks的简称,独立磁盘冗余阵列,简称磁盘阵列。磁盘阵列其实也分为软阵列(SoftwareRaid)和硬阵列(HardwareRaid)两种. 软阵列:即通过软件程序并由计算机的CPU提供运行能力所成.由于软件程式不是一个完整系统故只能提供最基本的RAID容错功能.其他如热备用硬盘的设置...

【大话存储】学习笔记(4,5章),RAID

RAID 上一章介绍了磁盘的基本原理,我们知道一块磁盘的容量和速度是有限的,对于一些应用来说,可能需要几个TB的大小的来存放数据,我们必须要制造更大单盘容量的磁盘吗?实际上,可以使用多块磁盘并行起来解决这个问题,这就是RAID技术。 RAID:独立的磁盘组成具有冗余特性的阵列。Redundant Array of Independent Disks n...

【Java 校验框架 Validation 】-解决方式

参数校验是我们程序开发中必不可少的过程。用户在前端页面上填写表单时,前端js程序会校验参数的合法性,当数据到了后端,为了防止恶意操作,保持程序的健壮性,后端同样需要对数据进行校验。后端参数校验最简单的做法是直接在业务方法里面进行判断,当判断成功之后再继续往下执行。但这样带给我们的是代码的耦合,冗余。当我们多个地方需要校验时,我们就需要在每一个地方调用校验程...

文件上传漏洞(File Upload)

简介 File Upload,即文件上传漏洞,通常是由于对用户上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马,病毒,恶意脚本等获取服务器的webshell权限,并进而攻击控制服务器,因此文件上传漏洞带来的危害常常是毁灭性的。简单点说,就是用户直接或者通过各种绕过方式将webshell上传到服务器中进而执行利用。例如,如果你的服务器...

MySQL高级知识(八)——ORDER BY优化

前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index。 0.准备 #1.创建test表。 drop table if exists test; create table test( id int primary key auto_increment, c1 var...