Python:确定 SQL 选择列表中的 Oracle 数据库列数据类型

Cli*_*ock -1 cx-oracle sqldatatypes python-3.x

如何使用 Oracle 和 Python 中的 cx_Oracle 模块确定选择列表中列的列数据类型。本质上是一种光标内省。

我见过需要根据表名查询 Oracle 数据字典的解决方案。但是,如果您需要编写动态执行 SQL 的代码,例如存储在文件中的 SQL,它连接两个或多个表,事情就会变得棘手。此方法允许您询问游标以及选择列表中的任何给定列,无论它源自哪个表或视图,从而确定该列的数据类型。

Cli*_*ock 5

所以这就是解决方案。假设我定义了游标 cur 并按如下方式执行 SQL:

    cur = con.cursor()
    cur.execute('SELECT colX, colY, colZ,... FROM my_table')
Run Code Online (Sandbox Code Playgroud)

我们现在可以询问游标对象,如果我们想要以列表形式返回列的名称,我们可以这样做:

    col_names = [row[0] for row in cur.description]
Run Code Online (Sandbox Code Playgroud)

因此,在这里,col_names[1] 在我们的示例 SQL 中将显示为“colY”。

以类似的方式,我们可以获取数据类型列表:

    col_types = [row[1] for row in cur.description]
Run Code Online (Sandbox Code Playgroud)

现在我们可以通过执行以下操作来测试数据类型:

    if (col_types[i].__name__ == 'DATETIME'):
        ...
Run Code Online (Sandbox Code Playgroud)

或者如果我们只是想报告数据类型,我们可以使用:

    print (col_types[i].__name__)
Run Code Online (Sandbox Code Playgroud)

注意:观察到的数据类型与 Oracle 数据类型近似。例如,Oracle DATE 列将被描述为 DATETIME,VARCHAR2 将显示为 STRING。要查看完整的映射,请参阅:

https://www.oracle.com/technetwork/articles/dsl/prez-python-queries-101587.html