使用python向oracle中插入大量clob类型测试数据

日常工作中存在oracle数据库中大量生成测试样例的需求,本项工作的难点在于clob类型数据的修改以及插入。由于clob是超大字符类型,所以在插入时不能使用普通的insert语句,在当前工作中一般使用数据库软件中的添加数据行的按钮插入测试数据,但面临大量测试数据的生成工作时,该方式无法满足业务需求,故探索是否可以使用python大量插入clob类型的字段。
一、实现python向oracle中插入clob类型数据
实现方法参考python cx_oracle插入clob类型数据

#插入数据函数
def insert_clob(SOS_ID,APPDATA,CREDITDATA):
    db=oracle.connect('xxxx')
    cursor=db.cursor()
    sql_insert='insert into sos_data(SOS_ID,APPDATA,CREDITDATA) VALUES(:SOS_ID,:APPDATA,:CREDITDATA)'
    clob_data1 = cursor.var(oracle.DB_TYPE_CLOB)
    clob_data2 = cursor.var(oracle.DB_TYPE_CLOB)
    clob_data1.setvalue(0, APPDATA)
    clob_data2.setvalue(0, CREDITDATA)
    data = {'SOS_ID': SOS_ID, 'APPDATA': clob_data1, 'CREDITDATA': clob_data2}
    cursor.prepare(sql_insert)
    cursor.execute(None, data)
    db.commit()
    cursor.close()
    db.close()

SOS_ID='123456'
APPDATA ='这是一个超长超长的文本'
CREDITDATA='这也是一个超长超长的文本'
insert_clob(SOS_ID,APPDATA,CREDITDATA)

数据插入成功!
在这里插入图片描述
二、导入测试样例,修改clob类型数据,批量修改批量插入
(一)导入测试样例,将其调整为字典

#导入测试样本
df=pd.read_table(r"D:\Program Files (x86)\PICT\test_res.txt")
#将测试样本转成字典
APPDATA_dict=df.T.to_dict('dict')

在这里插入图片描述
在这里插入图片描述
如上图所示,需将clob数据中的SUBMITDATE和ENTRYTIME逐行替换,一共生成4条测试数据。
(二)主键随机生成:利用系统时间生成主键

import datetime
#主键生成函数
def ran_sos_id():
    time_now=str(datetime.datetime.now())
    return "T"+time_now[:4]+time_now[5:7]+time_now[8:10]+time_now[11:13]+time_now[14:16]+time_now[17:19]+time_now[20:22]

(三)替换指定数据,并插入数据库中
假设要修改的SUBMITDATE和ENTRYTIME都在APPDATA中,被修改数据如下:

APPDATA ='''{"DEALER_CURRENT_OVERDUE_APP_NUM": 0,"DEALER_HUKOU_PROVINCE": "浙江省","SUBMITDATE":"2023-01-01","ENTRYTIME":  "9999-01-01"}'''
CREDITDATA='这也是一个超长超长的文本'

替换插入可以通过如下代码实现:

for i in np.arange(len(APPDATA_dict)):
    re_dict=APPDATA_dict[i]
    #读取字典值并替换,根据实际需求调整
    #第一个要替换的字段
    base=APPDATA.find('SUBMITDATE')
    begin=APPDATA.find(':',base,len(APPDATA))
    end=APPDATA.find(',',base,len(APPDATA))
    APPDATA =APPDATA[:begin+1]+'\"'+str(re_dict['SUBMITDATE'])+'\"'+APPDATA[end:]
    #第二个要替换的字段
    base=APPDATA.find('ENTRYTIME')
    begin=APPDATA.find(':',base,len(base_APPDATA))
    end=APPDATA.find(',',base,len(base_APPDATA))
    APPDATA =APPDATA[:begin+1]+'\"'+str(re_dict['ENTRYTIME'])+'\"'+APPDATA[end:]

    SOS_ID=ran_sos_id()
    print('\''+SOS_ID+'\',')
    insert_clob(SOS_ID,APPDATA,CREDITDATA)

如上,可完成向oracle中批量插入clob类型测试数据的工作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 SqlSugar 进行批量插入实体时,如果要插入 OracleClob 类型的数据,可以按照以下步骤进行操作: 1. 在实体类定义一个属性,类型为 string,用于存储 Clob 数据。 ```csharp public class MyEntity { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public string ClobData { get; set; } // 用于存储 Clob 数据 } ``` 2. 在执行批量插入操作时,将 Clob 数据转换为 OracleClob 类型,并设置到实体的 ClobData 属性。可以使用 SqlSugar 提供的 ToOracleClob 方法进行转换。 ```csharp var entities = new List<MyEntity> { new MyEntity { Id = 1, Name = "Entity 1", Description = "Description 1", ClobData = "Clob Data 1" }, new MyEntity { Id = 2, Name = "Entity 2", Description = "Description 2", ClobData = "Clob Data 2" }, // ... }; using (var db = new SqlSugarClient(connectionString)) { var insertable = db.Insertable(entities); foreach (var entity in entities) { // 将 ClobData 转换为 OracleClob 类型,并设置到实体的 ClobData 属性 insertable = insertable.SetInsertIdentity().InsertColumns(it => it.Name, it => it.Description, it => it.ClobData.ToOracleClob()); } var result = await insertable.ExecuteCommandAsync(); } ``` 注意:在使用 ToOracleClob 方法时,需要在 SqlSugar 的连接字符串指定 Oracle 数据库的 ProviderName,例如: ```csharp var db = new SqlSugarClient(new ConnectionConfig { ConnectionString = connStr, DbType = DbType.Oracle, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute, ProviderName = "Oracle.ManagedDataAccess.Client" }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值