首页 新闻 赞助 找找看

使用python往Oracle插入数据报错

0
悬赏园豆:100 [待解决问题]

用python往Oracle批量插入数据,报错
expecting string or bytes object
[(218079, Decimal('26600.00'), 53746, 0, '2021-09-28 12:40:04', '2021-10-08 17:23:35', 165576244, 44, 1, '', '', '', '', '', '2021-10-10 19:25:07', 'SZ-JY-JYL-JHSJ-2110303Ⅰ', '2021-11-01 15:21:16', 15, 1, 1), (218089, Decimal('5000.00'), 71560, 133348, '2021-10-08 00:00:00', '2021-10-08 19:43:08', 170789386, 390, 1, 218089, 71560, 100.0, 390, 1, '2021-12-03 17:03:18', 'eA-TJ4-JY-L-PT-3110069F', '', 1, 1, 1)]

insert into LYRATE_CON_DETAIL(CON_ID, DEDUCTIONS_AMT, CON_SALES_ID, IS_ECONTRACT, DK_TIME, CON_FIRST_CREATE, CUST_ID, SHOP_ID, IS_COOPERATION, CS_CON_ID, CS_SALES_ID, COOPERATE_SALES_RATE, CS_SHOP_ID, CS_IS_COOPERATION, SIGN_TIME, CONTRACT_NUM, FIRST_BIND_TIME, CONTRACT_TYPE, NUM, BRAND) values(:1, :2, :3, :4, to_date(:5, 'yyyy-mm-dd hh24:mi:ss'), to_date(:6, 'yyyy-mm-dd hh24:mi:ss'), :7, :8, :9, :10, :11, :12, :13, :14, to_date(:15, 'yyyy-mm-dd hh24:mi:ss'), :16, to_date(:17, 'yyyy-mm-dd hh24:mi:ss'), :18, :19, :20)

这是每两条循环插入的,我如果一条循环插入就不会报错,这里边的空值我已经都处理为 '' 了,看这个意思是 数值型字段,批量插入的数据中有空值就会报错
我就无语了,为什么会有这么坑的地方,已经快把我整疯了

但愿长醉丶不愿醒的主页 但愿长醉丶不愿醒 | 初学一级 | 园豆:146
提问于:2021-12-14 17:09
< >
分享
所有回答(2)
0

我记得 cx_oracle 会处理空值,你试试 None
另外

 'SZ-JY-JYL-JHSJ-2110303Ⅰ'
这是你贴错了,还是本来就是这个值
〆灬丶 | 园豆:2287 (老鸟四级) | 2021-12-14 17:14

看了好多例子,好像并不能对 None 做处理;手上没有 Oracle 你只能靠自己或别人了

支持(0) 反对(0) 〆灬丶 | 园豆:2287 (老鸟四级) | 2021-12-14 17:30

我原来是把mysql查出来的结果转化为了以元组为元素的列表,并把其中的 None全部转化了 '',我刚把这两步转化都取消了,确实不会报错了,但是我原来为什么要这么做我给忘了,应该跟这个 None 有关系
那个是个字符串,不是乱码

支持(0) 反对(0) 但愿长醉丶不愿醒 | 园豆:146 (初学一级) | 2021-12-14 17:48

@但愿长醉丶不愿醒:
嗯,能解决问题就行(具体内部是怎样处理的,你可以断点进去看看,应该都会有 SQL 的表达式)
转换成元组列表是为了批量插入,是和 “:18” 这种占位搭配的
转换空字符,一般是给 string 类型用的,你用 pandas.Dataframe 处理会经常用到
(快 1 年没碰 Oracle 了,完全是凭印象答疑)

支持(0) 反对(0) 〆灬丶 | 园豆:2287 (老鸟四级) | 2021-12-15 09:16
0

循环插入是不是写的过快 数据库反应不过来 给你报错 加个延时看看

身边的世界 | 园豆:202 (菜鸟二级) | 2021-12-17 08:38

应该不是循环的问题,这里报的是数据格式问题

支持(0) 反对(0) 但愿长醉丶不愿醒 | 园豆:146 (初学一级) | 2021-12-17 10:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册