中国百科网vip钓鱼网站开发,专门做旅行用品的网站,做h5网站pc加手机版要多少钱,昆明二建建设集团网站最近的一个测试任务需要测试 oracle 同步 hive 数据库的性能#xff0c;那就需要对 oracle 数据库灌注测试数据。我就又打开了我的IDE#xff0c;准备把我之前一下可以灌50w数据到 MySQL 的代码#xff0c;改一改#xff0c;直接用。
因为我在网上看到#xff0c;语法上也…
最近的一个测试任务需要测试 oracle 同步 hive 数据库的性能那就需要对 oracle 数据库灌注测试数据。我就又打开了我的IDE准备把我之前一下可以灌50w数据到 MySQL 的代码改一改直接用。
因为我在网上看到语法上也差不多基本上没有区别。于是我先打开了 windows 的 cmd 模式输入pip install cx_Oracle 下载好连接数据库的第三方包。当然也可以通过 python 第三方库官网https://pypi.org/下载相应版本的文件后自行安装。
搞定第三方库后面就开始写代码了我直接把之前连接 MySQL 的代码拿过来做修改。首先来看数据库连接部分。 连接方式不同但是也不难连接后就试试吧先查看一下版本号结果就出错了
报错信息
oracle_db cx_Oracle.connect(dspuser,Aa123456,10.26.214.119:1521/orcl)
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: The specified module could not be found. See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help 上网查吧发现是因为 python 的安装目录下没有 oracle 的 dll 文件也许是因为第三方包需要那就安排。
我从网上找到的帖子中提供了 oracle11 的 dll 文件下载回来放到 python 安装目录后迫不及待的再次运行代码结果 DPI-1047 的错误倒是没有了换成 “ORA-28040: No matching authentication protocol” 了。
只好再次上网查询出错原因原来是 oracle 的版本不一致我用的是 oracle11 的 dll而我连接的 oracle 版本是在我使用 select * from v$version 语句查询后才看到我连接的 oracle 版本。 问题跟着又来了我去哪找12.2版本的dll文件呢还是继续网上找多篇文章都说要下载一个instantclient。那就把它请出来吧。
我通过oracle官网找到并下载了instantclient地址如下https://www.oracle.com/cn/database/technologies/instant-client/winx64-64-downloads.html
而下载下来的 instantclient 其实就是一个zip包打开这个包把里面所有的dll都一股脑的复制到 python 的根目录下链接的问题终于解决了 下面就开始创建表了我是直接把 MySQL 创建表的语句直接拿了过来结果就不出意外的出了意外。
报错信息
ORA-00907: missing right parenthesis报错位置在创建表语句。因为是用 MySQL的建表语句所以只好找 oracle 相关建表语句发现和 MySQL 语句还是有区别的。首先表名和字段名上的小引号要去掉其次字段类型不同得改oracle与MySQL对应请网上自查最后oracle不支持自增主键在字段定义中声明。
MySQL建表语句
creat_table_sqlCREATETABLE testtable(id bigintNOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL COMMENT 字典名称,remark varchar(255) DEFAULTNULL COMMENT 描述,testC01umn1 varchar(128) DEFAULTNULL,testC01umn2 datetimeDEFAULTNULL,testC01umn3 intDEFAULTNULL,testC01umn4 varchar(128) DEFAULTNULL,testC01umn5 varchar(128) DEFAULTNULL,testC01umn6 varchar(128) DEFAULTNULL,testC01umn7 varchar(128) DEFAULTNULL,testC01umn8 varchar(128) DEFAULTNULL,testC01umn9 intDEFAULTNULL,testC01umn10 datetimeDEFAULTNULL,testC01umn11 varchar(128) DEFAULTNULL,testC01umn12 varchar(128) DEFAULTNULL,testC01umn13 varchar(128) DEFAULTNULL,testC01umn14 varchar(128) DEFAULTNULL,testC01umn15 varchar(128) DEFAULTNULL,PRIMARYKEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEUtf8mb4_0900_ai_ci COMMENT测试表
Oracle建表语句
creat_table_sqlCREATETABLE testtable (id NUMBER(38,0) NOT NULLPRIMARY KEY,nameVARCHAR2(255) NOT NULL,remark VARCHAR2(255) DEFAULTNULL,testColumn1 VARCHAR2(128) DEFAULTNULL,testColumn2 DATEDEFAULTNULL,testColumn3 NUMBER(10) DEFAULTNULL,testColumn4 VARCHAR2(128) DEFAULTNULL,testColumn5 VARCHAR2(128) DEFAULTNULL,testColumn6 VARCHAR2(128) DEFAULTNULL,testColumn7 VARCHAR2(128) DEFAULTNULL,testColumn8 VARCHAR2(128) DEFAULTNULL,testColumn9 NUMBER(10) DEFAULTNULL,testColumn10 DATEDEFAULTNULL,testColumn11 VARCHAR2(128) DEFAULTNULL,testColumn12 VARCHAR2(128) DEFAULTNULL,testColumn13 VARCHAR2(128) DEFAULTNULL,testColumn14 VARCHAR2(128) DEFAULTNULL,testColumn15 VARCHAR2(128) DEFAULTNULL建表语句的问题解决了后面就要插入数据问题更是一大堆。
最先出现的错误是ORA-00928: missing SELECT keyword这个错误主要是因为插入的数据字段名含有关键字我试了好几种办法都无法避免主要是懒的再从新建表或修改字段名
最后插入数据的语句干脆就不填写字段名只要位置正确就可以了还有就是插入的数据不能使用python的格式化符号‘%s’来替换只能使用占位符。所以这时的插入语句就变成了这样
insert_sqlINSERT INTO TESTTABLE VALUES(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12, 13 ,:14,:15)我把字段名都不要了这回总没错了吧结果还是报错
报错信息ORA-01861: literal does not match format string。再一次全网搜索发现是因为我有日期格式的字段在插入数据时需要转换一下才可以所以最终我的插入语句变成了这样
insert_sqlINSERT INTO TESTTABLE VALUES(:1,:2,:3,:4,to_data(:5,yyyy-MM-DD hh24:mi:ss),:6,:7,:8,:9,:10,:11,:12,to_data(:13,yyyy-MM-DD hh24:mi:ss),:14,:15)在转换了日期格式后顺利插入数据没有再报错。这次本来觉得很简单的测试数据注入费时费力还好我把踩过的坑都帮同学们踩了一遍。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你