使用绑定时,cx_Oracle返回空查询

ian安

在我的sql应用程序中执行查询时遇到一个奇怪的问题。我正在使用python3和cx_Oracle 5.1.2。我的测试表组织如下:

创建表人员(sin CHAR(15),名称VARCHAR(40),PRIMARY KEY(sin))

插入以下值(sin,name):

('1','a'),('2','b'),('3','c')

当我使用不安全的查询进行简单选择时:

curs.execute(“从sin ='1'的人中选择姓名”)

如预期的那样,结果是'a',但是如果我使用绑定:

curs.execute(“从sin =:v的人中选择姓名,v ='1')

结果为空。我已经尝试将其更改为位置“?” 参数,通过setinputsizes(v = 15)设置'v'的大小,但似乎没有任何效果。

有什么我想念的吗?

谢谢,

马可·鲍德利(Marco Baldelli)

问题出在您使用CHAR数据类型而不是VARCHAR2。

您甚至可以在SQL * Plus中观察到差异。

如果我们绑定VARCHAR2变量,则不会选择任何行:

SQL> variable v varchar2(15)
SQL> exec :v := '1';

PL/SQL procedure successfully completed.

SQL> select name from people where sin = :v;

no rows selected

相反,如果我们绑定一个CHAR变量,该变量与该列具有相同的数据类型,则选择一行:

SQL> variable v char(15)
SQL> exec :v := '1';

PL/SQL procedure successfully completed.

SQL> select name from people where sin = :v;

NAME
----------------------------------------
a

因此,您需要将列数据类型从CHAR更改为VARCHAR2(顺便说一下,VARCHAR也已过时),或指示cx_Oracle使用FIXED_CHAR数据类型:

>>> v = curs.var(cx_Oracle.FIXED_CHAR, 15)
>>> v.setvalue(0, '1')
>>> print v
<cx_Oracle.FIXED_CHAR with value '1'>

>>> result = curs.execute("select name from people where sin = :sin", sin=v)
>>> for r in result: print r

('a',)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用绑定时,cx_Oracle返回空查询

来自分类Dev

cursor.fetchall() 使用 cx_Oracle 返回空元组

来自分类Dev

CX_Oracle使用绑定变量/函数插入数据并返回记录ID

来自分类Dev

无法使用 sqlalchemy/cx_oracle 中的绑定参数创建表

来自分类Dev

在cx_oracle上使用多个主机

来自分类Dev

对于cx_Oracle,在Python中将日期绑定到SQL

来自分类Dev

python cx_Oracle绑定非法变量名

来自分类Dev

使用Python和cx_Oracle是否可以进行空间查询?

来自分类Dev

远程运行 cx_Oracle 查询时使用了哪些计算机的资源?

来自分类Dev

在Python中使用cx_Oracle和xlrd的带有列表列表的executemany()返回TypeError

来自分类Dev

使用Python设置cx_Oracle环境变量

来自分类Dev

如何在假脱机中使用python cx_Oracle

来自分类Dev

cx_Oracle 使用 Windows 身份验证

来自分类Dev

Python cx_Oracle更新

来自分类Dev

Cx_Oracle和Pyinstaller

来自分类Dev

cx_oracle的安装失败

来自分类Dev

CX_Oracle CTE 执行

来自分类Dev

cx_Oracle 向后兼容?

来自分类Dev

ORA-01036 错误,当用 cx_oracle 绑定变量时

来自分类Dev

使用 ComplexKey 查询 CloudantClient 返回空键

来自分类Dev

cx_Oracle 1900-01-01 00:00:00.000000不返回毫秒

来自分类Dev

如何使用cx_oracle django程序包连接到oracle旧数据库?

来自分类Dev

如何使用Python cx_Oracle从US7ASCII Oracle中读取国家字符(> 127)?

来自分类Dev

使用python连接到Oracle数据库(cx_oracle)

来自分类Dev

使用python cx_oracle将数据导入到oracle

来自分类Dev

Python 使用 cx_Oracle 在 Oracle BD 中导入/插入 CSV(无标题)

来自分类Dev

使用 cx_Oracle 将完整的 python 列表推送到 oracle db

来自分类Dev

在 ml-engine 中使用 cx_oracle 导致“无法加载 Oracle 客户端库”

来自分类Dev

使用 cx_Oracle executemany() 从 Python 列表/字典批量插入 Oracle 数据库

Related 相关文章

  1. 1

    使用绑定时,cx_Oracle返回空查询

  2. 2

    cursor.fetchall() 使用 cx_Oracle 返回空元组

  3. 3

    CX_Oracle使用绑定变量/函数插入数据并返回记录ID

  4. 4

    无法使用 sqlalchemy/cx_oracle 中的绑定参数创建表

  5. 5

    在cx_oracle上使用多个主机

  6. 6

    对于cx_Oracle,在Python中将日期绑定到SQL

  7. 7

    python cx_Oracle绑定非法变量名

  8. 8

    使用Python和cx_Oracle是否可以进行空间查询?

  9. 9

    远程运行 cx_Oracle 查询时使用了哪些计算机的资源?

  10. 10

    在Python中使用cx_Oracle和xlrd的带有列表列表的executemany()返回TypeError

  11. 11

    使用Python设置cx_Oracle环境变量

  12. 12

    如何在假脱机中使用python cx_Oracle

  13. 13

    cx_Oracle 使用 Windows 身份验证

  14. 14

    Python cx_Oracle更新

  15. 15

    Cx_Oracle和Pyinstaller

  16. 16

    cx_oracle的安装失败

  17. 17

    CX_Oracle CTE 执行

  18. 18

    cx_Oracle 向后兼容?

  19. 19

    ORA-01036 错误,当用 cx_oracle 绑定变量时

  20. 20

    使用 ComplexKey 查询 CloudantClient 返回空键

  21. 21

    cx_Oracle 1900-01-01 00:00:00.000000不返回毫秒

  22. 22

    如何使用cx_oracle django程序包连接到oracle旧数据库?

  23. 23

    如何使用Python cx_Oracle从US7ASCII Oracle中读取国家字符(> 127)?

  24. 24

    使用python连接到Oracle数据库(cx_oracle)

  25. 25

    使用python cx_oracle将数据导入到oracle

  26. 26

    Python 使用 cx_Oracle 在 Oracle BD 中导入/插入 CSV(无标题)

  27. 27

    使用 cx_Oracle 将完整的 python 列表推送到 oracle db

  28. 28

    在 ml-engine 中使用 cx_oracle 导致“无法加载 Oracle 客户端库”

  29. 29

    使用 cx_Oracle executemany() 从 Python 列表/字典批量插入 Oracle 数据库

热门标签

归档