如何在 python 中将十六进制字符串转换为二进制以便使用 cx_oracle 插入
我有一个包含 16 位十六进制数字列表的文本文件(例如“61C7393AA9B3474DB081C7B7CCE1C545”),我需要使用 cx_Oracle 将它们插入 Oracle RAW 列。 我尝试了这个:
sql = "INSERT INTO GUIDS VALUES (HEXTORAW(:1))"
ids = [l.strip() for l in guidfile.readlines()]
cursor.bindarraysize = len(ids)
cursor.setinputsizes(cx_Oracle.BINARY)
cursor.executemany(sql, ids)
但它失败并出现 cx_Oracle.DatabaseError: ORA-01036: 非法变量名称/编号。 在调用executemany之前,我需要将值转换为python中的二进制吗?如果是的话怎么办?注意,相同的 sql 可以与cursor.execute 和单个值一起正常工作,只是与我遇到问题的列表有关。
I have text file containing a list of 16 bit hex numbers (e.g. '61C7393AA9B3474DB081C7B7CCE1C545') and I need to insert them an Oracle RAW column using cx_Oracle.
I tried this:
sql = "INSERT INTO GUIDS VALUES (HEXTORAW(:1))"
ids = [l.strip() for l in guidfile.readlines()]
cursor.bindarraysize = len(ids)
cursor.setinputsizes(cx_Oracle.BINARY)
cursor.executemany(sql, ids)
but it fails with cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number.
Do I need to convert the values to binary in python before calling executemany ? And if so how? NB the same sql works fine with cursor.execute and a single value, it just with the list that I'm having problems.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,我已经通过几种方式解决了这个问题。首先,上面的代码是不正确的,因为它创建了一个值列表,而它应该创建一个元组列表。即
然后使用
它就可以了。
关于最初的问题 - 如何摆脱 hextoraw,我发现这有效:
Well, I've solved it, in a couple of ways. Firstly, the code above is incorrect as it creates a list of values whereas it should be creating a list of tuples. i.e.
and then using
it works.
On the original question - how to get rid of the hextoraw, I found that this works: