为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:linux/windows
【CPU】:
【问题描述】*: 通过python脚本执行的语句:
cursor.execute(f"""
UPDATE {table}
SET {', '.join([f'{k.swapcase()} = "{v}"' for k, v in kwargs.items()])}
WHERE model_name = '{model_name}'
""")
执行print可以看到原语句为:
UPDATE baseline_model_info
SET STATUS = '4', TRAIN_END_TIME = '2024-01-30 15:11:44'
WHERE model_name = 'tes'
报错:dmPython.DatabaseError: [CODE:-2111]第5 行附近出现错误:
无效的列名[4]
4是更新的值,为何会被当作列名?对值的引用改为双引号或单引号都是同样的错误
原语句直接在数据库中执行也是没有问题的,所以是python接口的问题?
字段名称是否存在大小写,如果存在,需要将字段用双引号引起来,可以通过dba_tab_columns字段查看数据库存储的字段名称是什么。
建议您优先怀疑驱动适配的的问题、检查是否是最新的驱动。如果无法提供异常的demo工程,建议及时和项目上对应的技术服务工程师联系跟进。
可以用dmsqllog查看具体发到服务端的语句;或者直接在服务端查询 v$runtime_err_history 看具体语句是什么。
另外,这个有完整的错误堆栈么,看是不是还没到数据库,dmpyhton接口自己就报错了。
进一步的,如果有模拟的小pydemo就更好了,能更加精确的确认和恢复该问题啦。