我正在尝试配置超集(airbnb bi plataform),但是当我尝试配置新数据库连接到oracle时,我遇到了问题, Superset使用sqlalchemy进行数据库连接,我为连接定义tnsname并传递给超集,如文档http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#database-urls所示 oracle + cx_oracle:// ifn:XXXXXX @ DBDESA但产生错误
(TypeError:期望无或字符串)
分开我尝试与sqlalchemy建立连接以测试连接
Import sqlalchemy as sa
Eng = sa.create_engine ('oracle + cx_oracle: // ifn: XXXXXX @ DBDESA')
Eng.execute ('select 1 from dual') fetchall ()
但是我得到了同样的错误,还有其他需要的配置吗?编码或某些连接到oracle XE?或超集配置中的aditional params?
tnsnames.ora中
DBDESA =
(Description =
(Address_list =
(Address = (protocol = TCP) (host = XXX.XX.X.X) (port = 1524)))
(Connect_data = (Service_name = dbdesa)))
感谢您的帮助!
答案 0 :(得分:0)
我认为 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
答案 1 :(得分:0)
虽然文档说支持oracle,但是你很难让它工作。
例如:
superset/models/core.py
以及迁移superset/migrations/*
中执行此操作(查找创建表的每个位置)。superset/migrations/env.py
,之后:
if engine.name in ('sqlite', 'mysql'): kwargs = { 'transaction_per_migration': True, 'transactional_ddl': True, }
if engine.name in ('sqlite', 'mysql'): kwargs = { 'transaction_per_migration': True, 'transactional_ddl': True, }
为oracle添加类似的块,如下所示:
if engine.name in ('oracle'): kwargs = { 'transactional_ddl': True, }
请注意,我删除了if engine.name in ('oracle'):
kwargs = {
'transactional_ddl': True,
}
参数。你也可以在#34; 中使用equals而不是")
上的
添加"行"作为保留字transaction_per_migration
每次要升级超集时再次执行此操作。
放弃这个烂摊子并使用Mysql