KeyError:尝试将db2与Apache Airflow一起使用时的'ibm_db_sa'

时间:2017-02-01 22:22:26

标签: airflow

我使用sql_alchemy_conn = ibm_db_sa://{USERNAME}:{PASSWORD}@{HOST}:50000/airflow文件中的airflow.cfg设置了数据库连接。

当我运行airflow initdb时,会弹出KeyError: 'ibm_db_sa'。如何使用与Airflow的DB2连接?

===============

以下是更具体的错误消息:

airflow initdb
[2017-02-01 15:55:57,135] {__init__.py:36} INFO - Using executor SequentialExecutor
DB: ibm_db_sa://db2inst1:***@localhost:50000/airflow
[2017-02-01 15:55:58,151] {db.py:222} INFO - Creating tables
Traceback (most recent call last):
  File "/opt/anaconda/bin/airflow", line 15, in <module>
    args.func(args)
  File "/opt/anaconda/lib/python2.7/site-packages/airflow/bin/cli.py", line 524, in initdb
    db_utils.initdb()
  File "/opt/anaconda/lib/python2.7/site-packages/airflow/utils/db.py", line 106, in initdb
    upgradedb()
  File "/opt/anaconda/lib/python2.7/site-packages/airflow/utils/db.py", line 230, in upgradedb
    command.upgrade(config, 'heads')
  File "/opt/anaconda/lib/python2.7/site-packages/alembic/command.py", line 174, in upgrade
    script.run_env()
  File "/opt/anaconda/lib/python2.7/site-packages/alembic/script/base.py", line 416, in run_env
    util.load_python_file(self.dir, 'env.py')
  File "/opt/anaconda/lib/python2.7/site-packages/alembic/util/pyfiles.py", line 93, in load_python_file
    module = load_module_py(module_id, path)
  File "/opt/anaconda/lib/python2.7/site-packages/alembic/util/compat.py", line 79, in load_module_py
    mod = imp.load_source(module_id, path, fp)
  File "/opt/anaconda/lib/python2.7/site-packages/airflow/migrations/env.py", line 74, in <module>
    run_migrations_online()
  File "/opt/anaconda/lib/python2.7/site-packages/airflow/migrations/env.py", line 65, in run_migrations_online
    compare_type=COMPARE_TYPE,
  File "<string>", line 8, in configure
  File "/opt/anaconda/lib/python2.7/site-packages/alembic/runtime/environment.py", line 773, in configure
    opts=opts
  File "/opt/anaconda/lib/python2.7/site-packages/alembic/runtime/migration.py", line 159, in configure
    return MigrationContext(dialect, connection, opts, environment_context)
  File "/opt/anaconda/lib/python2.7/site-packages/alembic/runtime/migration.py", line 103, in __init__
    self.impl = ddl.DefaultImpl.get_by_dialect(dialect)(
  File "/opt/anaconda/lib/python2.7/site-packages/alembic/ddl/impl.py", line 65, in get_by_dialect
    return _impls[dialect.name]
KeyError: 'ibm_db_sa'

1 个答案:

答案 0 :(得分:1)

您是否为db2安装了所需的软件包?例如。 #include <opencv2\opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { Mat3b img(1000, 1000); randu(img, Scalar(0, 0, 0), Scalar(10, 10, 10)); { double tic = double(getTickCount()); Mat1b mean_img(img.rows, img.cols, uchar(0)); for (int r = 0; r < img.rows; ++r) { for (int c = 0; c < img.cols; ++c) { const Vec3b& v = img(r, c); mean_img(r, c) = static_cast<uchar>(round((double(v[0]) + double(v[1]) + double(v[2])) / 3.0)); } } double toc = (double(getTickCount()) - tic) * 1000.0 / getTickFrequency(); cout << "Loop: " << toc << endl; } { double tic = double(getTickCount()); Mat1b mean_img2 = img.reshape(1, img.rows*img.cols); reduce(mean_img2, mean_img2, 1, REDUCE_AVG); mean_img2 = mean_img2.reshape(1, img.rows); double toc = (double(getTickCount()) - tic) * 1000.0 / getTickFrequency(); cout << "Reduce: " << toc << endl; } { double tic = double(getTickCount()); vector<Mat1b> planes; split(img, planes); Mat1b mean_img3; if (img.channels() == 3) { mean_img3 = (planes[0] + planes[1] + planes[2]) / 3.0; } double toc = (double(getTickCount()) - tic) * 1000.0 / getTickFrequency(); cout << "Split: " << toc << endl; } getchar(); return 0; } 。顺便说一下,pypi页面列出它只与python 3兼容。

请注意,db2不作为Airflow的后端正式支持。