【问题标题】:Django cx_Oracle connection.cursor().description for oracle cursor datatypeDjango cx_Oracle connection.cursor().description for oracle cursor 数据类型
【发布时间】:2016-11-02 01:55:54
【问题描述】:

是否可以在 Django 视图中获取游标数据类型的描述?
问题是当我执行原始 SQL 时,我可以通过调用 cursor().description 来获取描述,但是当我执行 cursor().callfunc('oracleTestFunc',cx_Oracle.CURSOR,)
(oracleTestFunc 返回光标) 我无法获取字段描述。所以问题是获得description。我该如何实现呢?

更新

我的预言机函数是

create or replace package body test_cl is

function ret_proc_run return sys_refcursor is
  retval sys_refcursor;
begin

open retval for 
  select id_proc,inst_id,run_now from proc_run;

 return retval;
end;

end test_cl;

在 Django 视图中我这样称呼它

cursor = connection.cursor()
results=cursor.callfunc('test_cl.ret_proc_run',cx_Oracle.CURSOR,)

所以我想要做的是访问由 oracle 函数返回的各个字段(这些是id_procinst_idrun_now)稍后在模板中使用。
我认为cursor.description 方法是可能的,但在进一步阅读文档后我发现这是不可能的,因为它会为游标数据类型返回none

【问题讨论】:

  • 你是问如何从函数返回的光标中获取描述?
  • 我想在光标上调用描述函数。当我调用光标时,我没有得到任何结果,但是当我在视图中执行原始 sql 查询时,我可以调用它的描述方法。
  • Django 稍微包装了一些东西。您可能想直接尝试使用 cx_Oracle 来查看您想要做的事情在 Django 之外是否可以正常工作。您可以从 Django 中获取原始 cx_Oracle 连接。如果您需要,我可以追踪代码。告诉我。
  • @AnthonyTuinga 这个问题的来源是我想将光标从 oracle 转到 django 并访问视图中的单个光标字段。
  • 你能再解释一下吗?我不确定你想说什么。首先尝试在outside Django 做你想做的事情是一个好主意——这将消除你在使用Django 框架时遇到的任何问题,它确实有点包装(这通常是一种方便)。如果这不是您的选择,请在您的问题中多解释一下您的情况!谢谢。

标签: django oracle django-views cx-oracle


【解决方案1】:

是的, cursor.description 是要检查的正确属性,但是从您的问题描述中,您正在查看错误的光标!您需要使用从函数返回的光标(在您的情况下名为“结果”)。另一个游标(调用存储过程的游标)将按预期返回 None,因为您没有执行查询。

如果您确实需要获取原始 cx_Oracle 游标(由 Django 解包),您可以执行以下操作:

from django.db import connection
connection.cursor()
rawCursor = connection.connection.cursor()

第二行确保确实建立了连接。最后一行获取原始连接并使用它创建一个游标。

【讨论】:

  • 您暗示我不应该在cursor 上致电description 非常有帮助。我刚刚添加了一个res=results.fetchall(),然后我设法访问了res.description。谢谢。
  • 不客气。那你能把它标记为正确答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 2018-06-11
  • 2023-03-20
相关资源
最近更新 更多