根据 Python DB-API 在 RAW SQL 查询中实现命名参数后,我遇到了一个问题。
早些时候,我的代码如下(这在我的开发服务器和客户端的测试服务器上都可以正常工作)
cursor.execute("SELECT DISTINCT(TAG_STATUS) FROM TAG_HIST WHERE TAG_NBR = '%s' " %(TAG_NBR))
我将其更改为以下
cursor.execute("SELECT DISTINCT(TAG_STATUS) FROM TAG_HIST WHERE TAG_NBR = :TAG_NBR " ,{'TAG_NBR':TAG_NBR})
这个更改的版本(带有命名参数)在我的开发服务器上运行良好
- Windows XP 甲骨文 XE
- SQL*Plus:版本 11.2.0.2.0
- cx_Oracle-5.1.2-11g.win32-py2.7
但是,当部署在我的客户端的测试服务器上时,它不会....所有查询的执行都失败。
我的客户服务器的特点如下
- 视窗服务器 2003
- Oracle 数据库 10g 企业版 10.2.0.1.0 - 64bi
- cx_Oracle-5.1.2-10g.win32-py2.7
我得到的错误如下
Traceback (most recent call last):
File "C:/Program Files/App_Logic/..\apps\views.py", line 400, in regularize_TAG
T_cursor.execute("SELECT DISTINCT(TAG_STATUS) FROM TAG_HIST WHERE TAG_NBR = :TAG_NBR " ,{'TAG_NBR':TAG_NBR})
DatabaseError: ORA-01460: unimplemented or unreasonable conversion requested
感谢有人可以帮助我解决这个问题。
仅当 cx_Oracle 代码在 Web 应用程序(托管在 Apache 上)中运行时才会出现此问题。
如果我在 python 命令行中使用命名参数运行相同的代码,那么查询运行得很好。