【问题标题】:Cx_Oracle.DatabaseError: ORA-00984: column not allowed hereCx_Oracle.DatabaseError:ORA-00984:此处不允许列
【发布时间】:2015-07-16 14:16:30
【问题描述】:

得到这个: Cx_Oracle.DatabaseError: ORA-00984: column not allowed here 尝试通过 Python 在 Oracle Spatial DB 中插入数据时出错。

从XLS读取数据。下面是迭代读取和加载值的代码sn-p:

for r in range (2,high_row ):
 long  = sheet_ranges['A'+str(r)].value
 lat = sheet_ranges['B'+str(r)].value
 state  = sheet_ranges['C'+str(r)].value
 cty = sheet_ranges['D'+str(r)].value
 print lat
 print long
 print state
 print cty
 cur.execute('INSERT INTO NONMODEL_CAT_HAZARD (LONGITUDE,LATITUDE,STATE,COUNTRY) VALUES ('+str(long)+','+str(lat)+','+str(state)+','+str(cty)+')')      
 cxn.commit()   

输出:

501 0 33.64 -117.84 加利福尼亚州 美国

Traceback(最近一次调用最后一次): 文件“NMCatHazardLoadxls.py”,第 32 行,在 cur.execute('INSERT INTO NONMODEL_CAT_HAZARD (LONGITUDE,LATITUDE,STATE,COUNTRY) 值 ('+str(long)+','+str(lat)+','+str(state)+','+str(cty)+')') cx_Oracle.DatabaseError: ORA-00984: column not allowed here

请帮忙

【问题讨论】:

    标签: oracle python-2.7 cx-oracle


    【解决方案1】:

    你需要把所有的字符串值放在单引号里(不知道哪些是字符串,哪些是数字,所以我把所有的都放在单引号里):

    cur.execute('INSERT INTO NONMODEL_CAT_HAZARD (LONGITUDE,LATITUDE,STATE,COUNTRY) VALUES (\''+str(long)+'\',\''+str(lat)+'\',\''+str(state)+'\',\''+str(cty)+'\')')
    

    【讨论】:

    • 文件“NMCatHazardLoadxls.py”,第 32 行,在 中 cur.execute('INSERT INTO NONMODEL_CAT_HAZARD (LONGITUDE,LATITUDE,STATE,COUNTRY) VALUES (\''+str(long)+ '\',\''+str(lat)+'\',\''+str(state)+'\',\''+str(cty)+'\')\'') cx_Oracle.DatabaseError : ORA-01756: 引用的字符串没有正确终止
    • 给了我上述错误。另外,我将类型转换为字符串:str(),那么字符串值需要单引号吗?
    • 多加了一个单引号。编辑答案。 Oracle 语法需要单引号。
    猜你喜欢
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多