【发布时间】:2015-08-14 23:58:49
【问题描述】:
我有一个 oracle 表,我正在尝试将大量数据(主要是长字符串)从 csv 插入。
我发现我的字符串需要使用 CLOB 数据类型,因为它们通常超过 4000 个字符。我还发现我需要使用“setinputsizes()”函数,否则会遇到“ValueError: string data too large”。
但不知何故,使用“setinputsizes()”会破坏我的插入查询,我得到“ORA-01036: 非法变量名称/编号”?
例子:
create_query = "CREATE TABLE sequences (myid varchar(10), allele varchar(50), seq clob)"
cursor.execute (create_query)
cursor.setinputsizes(seq = cx_Oracle.CLOB)
insert_query = "INSERT INTO sequences (myid, allele, seq) VALUES ('00001;', 'HLA-A*01:01:01:01', 'CGCTGACCTGTG')" # seq truncated; in truth it's much longer hence the CLOB type
cursor.execute(insert_query)
没有 'setinputsizes()' 行,上面的查询执行得很好 - 但是当我使用超过 4000 个字符的 seq 的实际值时,它会失败
DatabaseError: ORA-01704: string literal too long
但是使用 'setinputsizes()' 行,我得到了
DatabaseError: ORA-01036: illegal variable name/number
(注意:我知道 executemany 更适合批量插入。但我在那里遇到了同样的错误,所以我先尝试解决这个问题。)
谁能告诉我做错了什么以及如何解决? 谢谢!
【问题讨论】: