TableauをSSH接続などによってローカルからDB環境に接続している場合、Tableau ServerにPublish後にデータソースの接続情報を書き換える必要があります。
Publish後にいちいち手作業でデータソースの接続設定を書き換えるのは手間なので、Pythonを使って自動でDB接続情報を書き換える方法を紹介します。
Tableau Desktop(twbファイル)の実態はXMLファイルなので、Pythonのライブラリを使えば簡単にパース、書き換えもできてしまいます。
(以下、twbファイルの実態)
環境
- mac High Sierra 10.13.6
- Tableau 2019.2.1
- Python 3.6.6
ディレクトリ構成
config
配下に設定ファイル、src
配下にpyファイルをおきます。
root/
├ config/
├ src/
設定ファイル
config
配下に以下を作成します。
conf.ini
[file]
# 書き換え対象のtwbファイル
TWB_FILE_PATH =
[parser]
# db接続情報を属性にもつタグ
DB_CONF_PATH = datasources/datasource/connection/named-connections/named-connection/connection
[db]
# 書き換え後のdb接続情報
PORT =
SERVER =
DBNAME =
USERNAME =
PASSWORD =
スクリプトファイル
以下のスクリプトを実行することで、twbファイルが書き換えられます。
XMLパースし、attributeを書き換えるだけの処理です。
main.py
import ConfigParser
import os
import sys
import xml.etree.ElementTree as ET
# 設定ファイルの読み込み
conf = ConfigParser()
# iniファイルの絶対パスを指定
conf.read(os.path.dirname(os.path.abspath('__file__')) + '/../config/conf.ini')
try:
# XMLを解析
tree = ET.parse(conf.get('file', 'TWB_FILE_PATH'))
# XMLを取得
root = tree.getroot()
# twbファイルのXMLパースに失敗した場合
except Exception as e:
print(f'{e}')
sys.exit(1)
# DB接続情報が記載されている属性を書き換え
for result in root.findall(conf.get('db', 'DB_CONF_PATH')):
# 属性の書き換え
result.set('port', conf.get('db', 'PORT'))
result.set('username', conf.get('db', 'USERNAME'))
result.set('dbname', conf.get('db', 'DBNAME'))
result.set('server', conf.get('db', 'SERVER'))
result.set('password', conf.get('db', 'PASSWORD'))
# 書き換えたXMLファイルを反映
tree.write(file_path, xml_declaration=True)
print('rewrote db_connection info.')