LoginSignup
1
7

More than 3 years have passed since last update.

Tableau Desktop(twbファイル)のDB接続情報をPythonで書き換える方法

Last updated at Posted at 2019-07-05

TableauをSSH接続などによってローカルからDB環境に接続している場合、Tableau ServerにPublish後にデータソースの接続情報を書き換える必要があります。
Publish後にいちいち手作業でデータソースの接続設定を書き換えるのは手間なので、Pythonを使って自動でDB接続情報を書き換える方法を紹介します。
Tableau Desktop(twbファイル)の実態はXMLファイルなので、Pythonのライブラリを使えば簡単にパース、書き換えもできてしまいます。
(以下、twbファイルの実態)
スクリーンショット 2019-07-05 21.45.41.png

環境

  • 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.')
1
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
7