本发明涉及数据库技术领域,特别是涉及一种数据库的数据模型更新方法和系统。
背景技术:
ORM(Object-Relation-Mapping,对象关系映射)框架是采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。
现有ORM框架中,如Hibernate可以对数据模型的修改进行检测,并自动同步修改数据库结构;但由于缺乏回滚和记录变更的手段,用户必须手动备份数据库表单,以防升级出错。
由此,在进行数据库迁移、升降级等更新过程中,如果用户不能及时备份,则在系统的数据模型发生变化时就无法记录数据库的差异和变更记录,降低了数据库的使用效率。
技术实现要素:
基于此,有必要针对上述技术问题,提供一种数据库的数据模型更新方法和系统,提高数据库的使用效率。
一种数据库的数据模型更新方法,包括:
获取当前数据库的表单数据,并反向生成对象模型;
读取新版本数据库的数据模型,对比所述对象模型与新版本的数据模型的差异,并生成带版本号的差分脚本;
将所述版本号记录到预先创建的数据表中;
根据所述数据表记录的版本号和差分脚本,对数据库的数据模型进行更新。
一种数据库的数据模型更新系统,包括:
转换模块,用于获取当前数据库的表单数据,并反向生成对象模型;
比对模块,用于利用数据库工具读取新版本的数据模型,对比所述对象模型与新版本的数据模型的差异,并生成带版本号的差分脚本;
记录模块,用于将所述版本号依据先后顺序记录到预先创建的数据表中;
更新模块,用于根据所述数据表记录的版本号和差分脚本,对数据库的数据模型进行更新。
上述数据库的数据模型更新方法和系统,将当前数据库的表单数据反向生成对象模型,将新版本数据库的数据模型与对象模型进行比对,将模型差异生成带版本号的差分脚本记录到预先创建的数据表中,在需要更新时,利用记录的版本号和差分脚本自动执行对数据库的数据模型的新。该技术方案,可以在数据模型发生变化是,记录数据模型的差异和变更记录,并可以为更新提供便捷的差分脚本,提高数据库的使用效率。
附图说明
图1是本发明实施例的数据库的数据模型更新方法流程图;
图2是一个实例的生成差分脚本的流程图;
图3是本发明实施例的数据库的数据模型更新系统结构示意图。
具体实施方式
下面结合附图阐述本发明的数据库的数据模型更新方法和系统的实施例。
参考图1所示,图1是本发明实施例的数据库的数据模型更新方法流程图,包括:
S110,获取当前数据库的表单数据,并反向生成对象模型;
此步骤中,在执行数据库的数据模型更新时,首先获取当前数据库的表单数据,根据原对象模型反向生成数据模型,便于对模型之间进行代码比对。
在一个实施例中,在反向生成对象模型前,可以使用ORM对象关系模型建立数据库表单;根据数据库的连接地址、用户名和密码,建立与数据库的连接;
进一步的,建立数据表,用于记录数据库的版本号;其中,初始化版本号置为0;创建所述数据库的备份脚本目录,并生成配置信息。
上述实施例,通过读取数据库的配置信息,建立与数据库的连接,然后执行数据库的数据模型的更新流程。
在一个实施例中,S110的反向生成对象模型的步骤,可以包括如下:
调用数据库引擎驱动,读取当前数据库的表单数据,根据表单数据进行代码转换,反向生成对象模型;具体的,获取所述表单数据中的名称和字段,对所述名称和字段进行排序,将所述名称和字段转换成代码。
S120,读取新版本数据库的数据模型,对比所述对象模型与新版本的数据模型的差异,并生成带版本号的差分脚本;
此步骤中,可以利用数据库工具(如sqlalchemy)读取新版本数据库的数据模型,
由于新的数据模型位于系统代码中,可以加载新旧版本的数据模型进行差异对比。
在一个实施例中,生成带版本号的差分脚本的步骤,可以将所述对象模型和新版本的数据模型中的每个元数据进行对比;根据所述元数据的字段差异,生成差分脚本及其版本号。
S130,将所述版本号记录到预先创建的数据表中;
此步骤中,通过在数据库中新增数据表,从而实现对数据库表单变更的版本控制,是对数据库进行更新的前提;例如,可以在预先创建的数据表中,在原版本号基础上将版本号加1。
S140,根据所述数据表记录的版本号和差分脚本,对数据库的数据模型进行更新;
此步骤中,利用数据表记录的版本号和差分脚本,可以对数据库模型进行更新,例如数据库的升降机操作,同时可以确保在更新过程当中的差异和变更记录。
参考图2所示,图2是一个实例的生成差分脚本的流程图,首先建立与数据库的连接,然后调用数据库引擎驱动器,将数据库变动数据反向生成对象模型与新版本的数据模型比对后,得到模型的差异,生成数据库脚本,保存为差分脚本。
在一个实施例中,所述更新操作为降级操作;对应的,所述步骤S140中具体的降级操作可以如下:
读取所述数据表中记录的最新的版本号;
查找所述最新的版本号的上一个版本号对应的差分脚本;
执行所述上一个版本号中的降级函数,将数据库的数据模型降级到上一个版本;其中,所述降级函数记录从数据库表单从新版本到旧版本的操作。
上述实施例中,通过数据表记录的最新的版本号,在降级的过程中,通过版本号减1后,找到对应的差分脚本,运行降级函数,即可恢复到相应版本的数据模型。
在一个实施例中,所述更新操作为升级操作;对应的,所述步骤S140中具体的升级操作可以如下:
读取所述数据表中记录的最新的版本号;
根据所述最新的版本号查找对应的差分脚本;
执行所述差分脚本中的升级函数,将数据库的数据模型升级到最新版本;其中,所述升级函数记录从数据库表单从旧版本到新版本的操作。
上述实施例中,在进行数据库的升级前,将要升级到的版本的数据模型与记录在数据表中的最新版本的数据模型进行差异比对,然后将两者差异生成差分脚本及其版本号,并将该版本号记录在数据表中,以供后续进行更新时使用。
本发明的技术,可以应用在软件开发过程中,特别是具备ORM的WEB框架中,在数据库的对象模型发生改变之后,自动对比原数据模型和新的数据模型,当模型不一致时,可以动态修改数据库字段;在数据模型新增字段,不影响原数据库中数据,仅进行新增字段的操作;数据库进行升级之前,可以自动把前后数据模型的差异记录为SQL差分脚本并保存;在进行升降级时,可分别执行升级脚本和降级脚本对数据库结构进行覆盖和修改;另外,数据模型和升降级脚本(如Class类和方法)可以使用Python通用库生成,可任意移植并转化成其他语言的数据模型。
综合上述实施例的方案,本发明的数据库的数据模型更新方法,具有如下优点:
(1)设计了数据库表单版本控制的方案;通过在数据表单中引进版本的概念,新增记录版本号的数据表单,表单名可以记为“version”从而实现对数据库表单变更的版本控制。
(2)通过数据库引擎驱动器,配置文件指定连接的数据库类型,对于连接不同类型的数据库,可以通过提供不同的参数类型,例如URL、用户名或密码等组合,使用不同的SQL语句;数据库引擎驱动器采用基于SQLalchemy实现的一种多数据库支持的库,使得在工作的时候,可以跨越不同的数据库系统,例如Mysql,Sqlite等。
(3)在进行升降级时,反向生成数据模型,并与新的数据模型进行差异对比,自动生成升降级的差分脚本,并将差分脚本名称以版本号作为标识,例如,可以记为“如0001_migrateion.**”以便升降级使用;
借助SQLalchemy库可以反向生成数据模型,差异对比新旧的数据模型,生成相应的升降级脚本函数。
参考图3所示,图3是本发明实施例的数据库的数据模型更新系统结构示意图,主要包括:
转换模块110,用于获取当前数据库的表单数据,并反向生成对象模型;
比对模块120,用于利用数据库工具读取新版本的数据模型,对比所述对象模型与新版本的数据模型的差异,并生成带版本号的差分脚本;
记录模块130,用于将所述版本号依据先后顺序记录到预先创建的数据表中;
更新模块140,用于根据所述数据表记录的版本号和差分脚本,对数据库的数据模型进行更新。
本发明的数据库的数据模型更新系统与本发明的数据库的数据模型更新方法一一对应,在上述数据库的数据模型更新方法的实施例阐述的技术特征及其有益效果均适用于数据库的数据模型更新系统的实施例中,特此声明。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。