我正在尝试使用Python cx_oracle更新表中的条目。该列名为“template”,其数据类型为CLOB。
这是我的代码:
dsn = cx_Oracle.makedsn(hostname, port, sid)
orcl = cx_Oracle.connect(username + '/' + password + '@' + dsn)
curs = orcl.cursor()
sql = "update mytable set template='" + template + "' where id='6';"
curs.execute(sql)
orcl.close()
当我这样做时,我收到一个错误,说字符串文字太长了。模板变量包含大约26000个字符。我该如何解决这个问题?
编辑:
我发现了这个:http://osdir.com/ml/python.db.cx-oracle/2005-04/msg00003.html
所以我尝试了这个:
curs.setinputsizes(value = cx_Oracle.CLOB)
sql = "update mytable set template='values(:value)' where id='6';"
curs.execute(sql, value = template)
我收到“ORA-01036:非法变量名称/号码错误”
EDIT2:
所以现在这是我的代码:
curs.setinputsizes(template = cx_Oracle.CLOB)
sql = "update mytable set template= :template where id='6';"
print sql, template
curs.execute(sql, template=template)
我现在收到ORA-00911:无效字符错误。
答案 0 :(得分:4)
在sql语句中插入值是一种非常糟糕的做法。您应该使用参数:
dsn = cx_Oracle.makedsn(hostname, port, sid)
orcl = cx_Oracle.connect(username + '/' + password + '@' + dsn)
curs = orcl.cursor()
curs.setinputsizes(template = cx_Oracle.CLOB)
sql = "update mytable set template= :template where id='6'"
curs.execute(sql, template=template)
orcl.close()
答案 1 :(得分:0)
更改您的表格定义。 varchar2
字段最多可以存储32767个字节;所以,如果您使用的是8位编码,那么在使用LOB之前,您还有一些空间可供使用。
答案 2 :(得分:0)
使用IronPython
import sys
sys.path.append(r"...\Oracle\odp.net.11g.64bit")
import clr
clr.AddReference("Oracle.DataAccess")
from Oracle.DataAccess.Client import OracleConnection, OracleCommand, OracleDataAdapter
connection = OracleConnection('userid=user;password=hello;datasource=database_1')
connection.Open()
command = OracleCommand()
command.Connection = connection
command.CommandText = "SQL goes here"
command.ExecuteNonQuery()