【问题标题】:Superset oracle configuration超集预言机配置
【发布时间】:2017-12-18 15:28:33
【问题描述】:

我正在尝试配置 Superset,但是当我尝试配置新数据库以连接到 oracle 时,我遇到了问题,

Superset 使用 sqlalchemy 进行 db 连接,我定义 tnsname 来连接并传递给 superset,如文档 http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#database-urls oracle+cx_oracle://ifn:XXXXXX@DBDESA 但产生错误

(TypeError: 期待 None 或字符串)

另外,我尝试与 sqlalchemy 建立连接以测试连接

    Import sqlalchemy as sa
    Eng = sa.create_engine ('oracle + cx_oracle: // ifn: XXXXXX @ DBDESA')
    Eng.execute ('select 1 from dual') fetchall ()

但我得到同样的错误,是否需要其他配置?连接到 oracle XE 的编码或某些东西?还是超集配置中的其他参数?

Tnsnames.ora

    DBDESA =
            (Description =
                    (Address_list =
            (Address = (protocol = TCP) (host = XXX.XX.X.X) (port = 1524)))
            (Connect_data = (Service_name = dbdesa)))

【问题讨论】:

    标签: python oracle sqlalchemy apache-superset


    【解决方案1】:

    我认为 URI 语法可能是错误的。

    请参考下例尝试设置URI

    oracle+cx_oracle://dbname:password@ipaddress:port/?service_name=yourtnsname
    

    例如:

    oracle+cx_oracle://test_db:test_password@10.22.3.202:1521/?service_name=hoge
    

    【讨论】:

      【解决方案2】:

      虽然文档说支持 oracle,但您将很难让它工作。

      例如:

      1. Superset 假定数据库支持自动增量,而 oracle 则不支持。您将需要在 Oracle 中创建所有序列并在您的域类中添加对它们的引用。您必须在超集代码superset/models/core.py 以及迁移superset/migrations/* 中执行此操作(查找创建表的每个位置)。
      2. Oracle 不支持超过 30 个字符的标识符(外键或列名)。您需要进行一些重命名。
      3. superset/migrations/env.py,之后:

      <pre></pre>

      if engine.name in ('sqlite', 'mysql'):
          kwargs = {
              'transaction_per_migration': True,
              'transactional_ddl': True,
       }
      

      为 oracle 添加一个类似的块,如下所示:

      <pre></pre>

      if engine.name in ('oracle'):
              kwargs = {
                  'transactional_ddl': True,
        }
      

      请注意,我删除了 transaction_per_migration 参数。你也可以使用 equals 代替 "in" :)

      1. 关于方言site-packages/sqlalchemy/dialects/oracle/base.px 添加“rows”作为保留字./base.py:360:RESERVED_WORDS

      2. 每次要升级超集时都重复一遍。

      3. 放弃这个烂摊子,用Mysql

      【讨论】:

      • 感谢您的提示。我在 vanilla superset 中看到的行为是,对于 oracle 12c,它在 SQL 编辑器中工作。如果我只选择一行,它也适用于可视化。尝试选择多行不会显示任何内容。这符合你的经验吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2019-04-14
      相关资源
      最近更新 更多