数据表结构自动更新方法和装置与流程

文档序号:26139653发布日期:2021-08-03 14:23阅读:204来源:国知局
本发明涉及软件开发领域,特别涉及一种数据表结构自动更新方法和装置。
背景技术
::目前,软件产品经常需要持续的优化更新,而优化更新时往往不可避免的导致支持该软件产品的数据表发生结构更新。针对数据表发生结构变化的情况,运维人员往往需要通过开发方提供的数据库文档,先对项目方进行数据库的升级,再进行产品升级。为了实现运维人员对项目方的数据库以及产品的升级,在部分软件研发过程中,开发方往往需要将结构发生变化的数据表文档进行整理,归档出数据库可执行的sql脚本,然而这种方式就会存在:无法及时更改以及及时记录,且更改和记录的过程十分麻烦;也就是说,每发生一次数据表更改就需要重复以上的步骤,加大了开发人员以及运维人员的工作量。另外,数据表文档的事后归纳整理也比较容易出错。由于sql脚本专业性较强,若其中某些sql语句执行不成功就会导致最终软件更新后一些功能会发生异常,而当sql脚本无法全部执行成功时,又需要运维和开发方进行沟通,排查错误语句的位置和内容,开发方在进行错误分析以及sql语句修改之后再交给运维人员执行,对于运维人员以及开发人员来说都需要大量的沟通成本以及排错成本,导致数据表更新效率低下。当然,市面上也存在数据库版本管理工具flyway,可以像git管理不同人的代码那样,flyway可用于管理不同情况的sql脚本,但是数据库版本管理工具flyway仅仅是为便于sql脚本语句的管理,其依旧需要开发人员实时更新sql脚本,而且flyway有较复杂的文件命名规范,且需要应用到数据库中以记录其运行的版本号,故导致操作工序的复杂,另外需要有专业知识的人予以管理。因此,亟需一种方便的、少入侵式的、可靠性强的数据表结构自动更新方法和装置。技术实现要素:本发明的目的在于提供一种数据表结构自动更新方法,本发明所述方法可实现自动解析目标数据表得到目标数据表的表结构信息,以及运维人员在更新或部署项目时,数据表结构自动更新装置会自动对比目标数据库中的表结构信息和待更新数据库中的表结构信息,生成相应sql脚本以完成对待更新数据表的更新和维护,进而避免了需要人工归档总结出数据库可执行的sql脚本所带来的诸多问题;且该数据表结构自动更新方法具有方便、少入侵式、可靠性强的优势。本申请实施例提供了一种数据表结构自动更新方法,包括以下步骤:从目标数据库中获取目标数据表,从待更新数据库中获取待更新数据表;解析所述目标数据表生成目标数据表的表结构信息,解析所述待更新数据表生成待更新数据表的表结构信息;对比所述目标数据表的表结构信息和所述待更新数据表的表结构信息,生成用于更新所述待更新数据表的语句并执行。并基于相同的构思,本申请实施例提供了一种数据表结构自动更新装置,包括:获取模块,用于从目标数据库中获取目标数据表,从待更新数据库中获取待更新数据表;解析模块,用于解析所述目标数据表生成目标数据表的表结构信息,解析所述待更新数据表生成待更新数据表的表结构信息;更新模块,用于对比所述目标数据表的表结构信息和所述待更新数据表的表结构信息,生成用于更新所述待更新数据表的语句并执行。另外,本申请实施例提出了一种计算机设备,其特征在于,所述计算机设备包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条程序代码,所述至少一条程序代码由所述一个或多个处理器加载并执行以实现如权利要求1-7任一项所述的据表结构自动更新方法所执行的操作。同时,本申请实施例提出了一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行如权利要求1-7任一项所述的据表结构自动更新方法。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1是根据本申请实施例的数据表结构自动更新方法的流程图;图2是根据本申请实施例的数据表结构自动更新装置的结构框图;图3是根据本申请实施例的数据表结构自动更新方法/装置的数据流转示意图;图4是根据本申请实施例的数据表结构信息生成方法的流程图;图5是根据本申请实施例的电子装置的硬件结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。为了便于本实施例的理解,首先对数据库进行简要介绍。数据库通常由多个数据表组成,数据表的一列称之为一个字段,用于限定数据在一个维度上的属性,例如“姓名”、“学号”、“年级”、“性别”等;数据表的一行称之为一条记录或数据,用于保存一条用户信息,该用户信息包含上述各个字段的维度信息。通常,在应用升级时,可能会修改部分或全部数据表的表结构,例如删除某些字段或者增加某些字段。通过对数据表中表结构的修改或记录的修改实现数据库的更新。其中,数据表在实际应用中可以是与业务相关的数据表(简称业务表),也可以为与其他方面相关的数据表。本实施例提供了一种数据表结构自动更新方法,该方法加载在数据表结构自动更新装置上运行,该装置可用软件的方式实现,也可作为插件集成到项目中。在实际应用场景中,开发方会将该装置作为插件集成到项目中,该项目对应开发方的数据库作为目标数据库,在项目完成后,将集成有数据表结构自动更新装置的项目交付给项目方;项目方在更新或部署该项目时,项目方的数据库也需要同步进行更新,因此该数据表结构自动更新装置将项目方的数据库作为待更新数据库并对其进行更新。图3是根据本申请实施例的数据表结构自动更新方法/装置的数据流转示意图。具体的,如图3所示,开发方的项目中包括第一配置文件,该第一配置文件中记录了目标数据库的连接信息,该装置的获取模块通过读取到第一配置文件中目标数据库的连接信息,连接目标数据库并向其发送请求,获取目标数据表。然后解析目标数据表,得到对应目标数据表的表结构信息。通常目标数据库中包括多张目标数据表,根据需要,该装置还可以将所有目标数据表的表结构信息封装输出成表结构文件,并将该表结构文件的存放目录记录到第一配置文件中。开发方在项目完成后,将项目打包交付给项目方,该项目中至少包括集成了数据表结构自动更新装置的项目源码、第一配置文件、表结构文件。项目方部署该项目时,将记录有待更新数据库的连接信息的第二配置文件导入到该数据表结构自动更新装置中,该装置的获取模块通过读取到第二配置文件中待更新数据库的连接信息,连接待更新数据库并向其发送请求,获取待更新数据表,然后解析待更新数据表,得到对应待更新数据表的表结构信息,通常待更新数据库中也包括多张待更新数据表。该装置的获取模块通过读取第一配置文件得到表结构文件的存放目录,获取表结构文件并将其解析成目标数据表的表结构信息。当有多张目标数据表和多张待更新数据表时,对待更新数据库增加缺少的待更新数据表、删除多余的待更新数据表之后,再对比表名相同的目标数据表的表结构信息和待更新数据表结构的表结构信息,生成用于更新待更新数据表的语句并执行。实施例一图1是根据本申请实施例的数据表结构自动更新方法的流程图,如图1所示,所述方法包括以下步骤s101至s103:步骤s101,从目标数据库中获取目标数据表,从待更新数据库中获取待更新数据表;步骤s102,解析所述目标数据表生成目标数据表的表结构信息,解析所述待更新数据表生成待更新数据表的表结构信息;步骤s103,对比所述目标数据表的表结构信息和所述待更新数据表的表结构信息,生成用于更新所述待更新数据表的语句并执行。图2是根据本申请实施例的数据表结构自动更新装置的结构框图。所述数据表结构自动更新方法加载在数据表结构自动更新装置上运行,如图2所示,该装置包括:获取模块201,用于从目标数据库中获取目标数据表,从待更新数据库中获取待更新数据表。在本实施例中,开发方的项目中包括第一配置文件,该第一配置文件中记录了目标数据库的连接信息,该装置的获取模块获取到该第一配置文件,并读取其中记录的目标数据库的连接信息,连接目标数据库并向其发送请求,获取到目标数据表。开发方将完成后的项目打包交付给项目方后,该项目中集成有数据表结构自动更新装置,项目方将记录了待更新数据库的连接信息的第二配置文件导入该数据表结构自动更新装置,同样的,该装置的获取模块获取到该第二配置文件,并读取其中记录的待更新数据库的连接信息,连接待更新数据库并其发送请求,获取到待更新数据表。通常目标数据库中含有多张目标数据表,待更新数据库中也含有多张待更新数据表,这里以获取到表名均为student_info的目标数据表和待更新数据表为例,目标数据表的表结构如表1-1所示,待更新数据表的表结构如表1-2所示。表1-1表1-2在表1-1和表1-2中,“true”表示“是”,false表示“否”,“/”表示字段没有该对应信息。解析模块202,用于解析所述目标数据表生成目标数据表的表结构信息,解析所述待更新数据表生成待更新数据表的表结构信息。图4是根据本申请实施例的数据表结构信息生成方法的流程图。如图4所示,在本实施例中,生成所述目标数据表的表结构信息和生成所述待更新数据表的表结构信息包括步骤s401至s403:步骤s401,定义字段信息类。在步骤s401中,字段信息类的属性包括:表名tablename、字段名fieldname、字段类型fieldtype、字段长度length、是否为主键ispk,是否为可空allownull、注释comment。步骤s402,解析所述目标数据表中至少一字段的字段信息实例化所述字段信息类,得到对应该字段的字段信息对象,组合所述字段信息对象得到所述目标数据表的表结构信息。在步骤s402中,该装置的解析模块解析目标数据表,以目标数据表中的student_name字段为例,该字段的字段信息为:student_name字段属于student_info表,字段类型为varchar,字段长度为100,不是主键,注释为“学生姓名”,不可为空。然后用该字段的字段信息实例化所述字段信息类得到一个字段信息对象,该字段信息对象可表示为:{“tablename”:“student_info”,“fieldname”:“student_name”,“fieldtype”:“varchar”,“length”:100,“ispk”:false,“comment”:“学生姓名”,“allownull”:false}从表1-1中可以看出目标数据表中一共有6个字段,分别是:id、student_name、age、sex、telephone、address。按照上述方法将6个字段全部实例化,得到6个字段信息对象。该装置将6个字段信息对象组合起来得到目标数据表的表结构信息。通常目标数据库中包括多张目标数据表,根据需要,该装置还可以将所有目标数据表的表结构信息封装输出成表结构文件,并将该表结构文件的存放目录记录到第一配置文件中。开发方在项目完成后,将项目打包交付给项目方,该项目中至少包括集成了数据表结构自动更新装置的项目源码、第一配置文件、表结构文件。项目方部署该项目时,该装置的获取模块通过读取第一配置文件得到表结构文件的存放目录,获取表结构文件并将其解析成目标数据表的表结构信息。步骤s403,解析所述待更新数据表中至少一字段的字段信息实例化所述字段信息类,得到对应该字段的字段信息对象,组合所述字段信息对象得到所述待更新数据表的表结构信息。按照步骤s402同样的方法,该装置的解析模块解析待更新数据表,生成待更新数据表的表结构信息。更新模块203,用于对比所述目标数据表的表结构信息和所述待更新数据表的表结构信息,生成用于更新所述待更新数据表的语句并执行。在本实施例中,在获得目标数据表的表结构信息和待更新数据表的表结构信息后,将两者进行对比。根据目标数据表的表结构信息和待更新数据表的表结构信息可以看出,字段address只存在于目标数据表中,因此需要为待更新数据表新增一个address字段,生成用于更新待更新数据表的语句“altertablestudent_infoaddaddressvarchar(255)nullcomment‘住址’”;home_phone字段只存在于待更新数据表中,因此需要删除待更新数据表中的home_phone字段,生成用于更新待更新数据表的语句“altertablestudent_infodropcolumnhome_phone”;另外,在目标数据表和待更新数据表中存在5个相同的字段,其中目标数据表中student_name字段的字段长度为100,待更新数据表中student_name字段的字段长度为50,因此需要修改待更新数据表中student_name字段的字段长度,生成用于更新待更新数据表的语句“altertablestudent_infomodifystudent_namevarchar(100)”。全部对比完成之后,依次执行上述生成的语句完成对待更新数据表的更新。在目标数据库中含有多张目标数据表时,先为待更新数据库中增加只存在于目标数据库中的目标数据表,再从待更新数据库中删除只存在于待更新数据库中的待更新数据表,然后再对比表名相同的目标数据表和待更新数据表按照上述方法生成用于更新待更新数据表的语句并执行。实施例二基于实施例一中的数据表结构自动更新方法,本实施例还提供了一种数据表初始化方法。开发方在第一配置文件中配置需要初始化的表名,数据表结构自动更新装置根据第一配置文件中的表名和目标数据库的连接信息,连接目标数据库并获取对应表名的目标数据表,然后解析目标数据表得到数据化数据信息,并自动生成用于初始化待更新数据表的语句。图2是根据本申请实施例的数据表初始化方法的流程图,如图1所示,所述方法包括以下步骤:定义数据信息类。在该步骤中,数据信息类的属性包括:表名tablename、字段名列表fieldnamelist、数据列表datalist。解析所述目标数据表中的至少一字段组成字段名列表、至少一条数据组成数据列表,实例化所述数据信息类,得到对应所述目标数据表的数据信息对象,将所述数据信息对象封装成初始化数据信息。在该步骤中,以实施例一中的表名为student_info的目标数据表为例,目标数据表中的数据如表2所示。表2从表2中可以看出,目标数据表中有6个字段,分别是:id、student_name、age、sex、telephone、address:4条数据,分别是:(1,‘张三’,null,null,null,null)、(2,‘李四’,null,null,null,null)、(3,‘王五’,null,null,null,null)、(4,‘赵六’,null,null,null,null),解析目标数据表,实例化数据信息类,得到数据信息对象表示为:{“tablename”:“student_info”,“fieldnamelist”:[‘id’,‘student_name’,‘age’,‘sex’,‘telephone’,‘address’],“datalist”:[[1,‘张三’,null,null,null,null],[2,‘李四’,null,null,null,null],[3,‘王五’,null,null,null,null],[4,‘赵六’,null,null,null,null]]}通常开发方会在第一配置文件中配置多个需要初始化的表名,将所有需要初始化的表名按照上述方法实例化数据信息类得到多个数据信息对象,把所有数据信息对象封装成初始化数据信息,并输出成初始化数据文件,然后将初始化数据文件的存放目录记录到第一配置文件中。根据所述初始化数据信息,生成用于初始化待更新数据表的语句并执行。在该步骤中,开发方将集成有数据表结构自动更新装置的项目交付于项目方后,项目方运行该装置,获取到第一配置文件,根据该第一配置文件中记录的初始化数据文件的存放目录,找到对应目录下的初始化数据文件,解析成初始化数据信息,并生成用于初始化待更新数据库中对应需要初始化的待更新数据表的语句。然后读取第二配置文件中待更新数据库的连接信息,连接待更新数据库并执行初始化操作。本实施例还提供了一种电子装置,包括存储器304和处理器302,该存储器304中存储有计算机程序,该处理器302被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。具体地,上述处理器302可以包括中央处理器(cpu),或者特定集成电路(applicationspecificintegratedcircuit,简称为asic),或者可以被配置成实施本申请实施例的一个或多个集成电路。其中,存储器304可以包括用于数据或指令的大容量存储器304。举例来说而非限制,存储器304可包括硬盘驱动器(harddiskdrive,简称为hdd)、软盘驱动器、固态驱动器(solidstatedrive,简称为ssd)、闪存、光盘、磁光盘、磁带或通用串行总线(universalserialbus,简称为usb)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器304可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器304可在数据处理装置的内部或外部。在特定实施例中,存储器304是非易失性(non-volatile)存储器。在特定实施例中,存储器304包括只读存储器(read-onlymemory,简称为rom)和随机存取存储器(randomaccessmemory,简称为ram)。在合适的情况下,该rom可以是掩模编程的rom、可编程rom(programmableread-onlymemory,简称为prom)、可擦除prom(erasableprogrammableread-onlymemory,简称为eprom)、电可擦除prom(electricallyerasableprogrammableread-onlymemory,简称为eeprom)、电可改写rom(electricallyalterableread-onlymemory,简称为earom)或闪存(flash)或者两个或更多个以上这些的组合。在合适的情况下,该ram可以是静态随机存取存储器(staticrandom-accessmemory,简称为sram)或动态随机存取存储器(dynamicrandomaccessmemory,简称为dram),其中,dram可以是快速页模式动态随机存取存储器304(fastpagemodedynamicrandomaccessmemory,简称为fpmdram)、扩展数据输出动态随机存取存储器(extendeddateoutdynamicrandomaccessmemory,简称为edodram)、同步动态随机存取内存(synchronousdynamicrandom-accessmemory,简称sdram)等。存储器304可以用来存储或者缓存需要处理和/或通信使用的各种初始化数据文件,以及处理器302所执行的可能的计算机程序指令。处理器302通过读取并执行存储器304中存储的计算机程序指令,以实现上述实施例中的任意孤寡老人的行为分析方法或孤寡老人的行为分析方法。可选地,上述电子装置还可以包括传输设备306以及输入输出设备308,其中,该传输设备306和上述处理器302连接,该输入输出设备308和上述处理器302连接。可选地,在本实施例中,上述处理器302可以被设置为通过计算机程序执行以下步骤:步骤s101,从目标数据库中获取目标数据表,从待更新数据库中获取待更新数据表;步骤s102,解析所述目标数据表生成目标数据表的表结构信息,解析所述待更新数据表生成待更新数据表的表结构信息;步骤s103,对比所述目标数据表的表结构信息和所述待更新数据表的表结构信息,生成用于更新所述待更新数据表的语句并执行。传输设备306可以用来经由一个网络接收或者发送数据。上述的网络具体实例可包括电子装置的通信供应商提供的有线或无线网络。在一个实例中,传输设备包括一个网络适配器(networkinterfacecontroller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备306可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。输入输出设备308用于输入或输出信息。例如,上述输入输出设备可以是显示屏、鼠标、键盘或其他设备。在本实施例中,输入设备用于输入采集得到的信息,输入的信息可以是数据、表格、图像、实时视频,输出的信息可以是通过业务系统展示的文本、图表以及告警信息等等。上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1