手元でデータ前処理とかで使う場合は、面倒なのでコード中にDB接続情報を書いてしまったりするけど、外部に出すアプリなどのコードではあまりに怖いので、接続情報は外部化して安全にしておきたいですよね。
コンフィグファイルを使用する:
- テキストファイルなどにデータベース接続情報を記述します。
- Pythonの configparser モジュールを使用して、コンフィグファイルから接続情報を読み込みます。
import mysql.connector
from configparser import ConfigParser
# コンフィグファイルの読み込み
config = ConfigParser()
config.read('config.ini')
# データベースに接続
conn = mysql.connector.connect(
host=config.get('Database', 'host'),
user=config.get('Database', 'user'),
password=config.get('Database', 'password'),
database=config.get('Database', 'database')
)
cursor = conn.cursor()
# ... アプリの処理コード ...
コンフィグファイルの構造は以下
[Database]
host = localhost
user = your_username
password = your_password
database = your_database
これで、config.ini はリポジトリの外に置いておくとかすれば、間違ってgithubにアップして漏洩、みたいな事故は防げます。あるいはgithubの「.gitignore」に「.ini」を設定しておけば、同期したときに自動的に除外されるので安心。
環境変数を使用する方法:
- システムの環境変数にデータベース接続情報を設定します。環境変数を設定するためのファイルの一般的な場所は、Ubuntuの場合は ~/.bashrc もしくは ~/.bash_profile です。
- vi や nanoなどで上記ファイルを編集します。ファイルの最後に以下を追記します。
export DB_HOST=localhost
export DB_USER=your_username
export DB_PASSWORD=your_password
export DB_DATABASE=your_database - ファイルを保存したあとに、次のコマンドをターミナルなどで実行します。
source ~/.bashrc - Pythonの os.environ を使用して、環境変数から接続情報を取得します。
import mysql.connector
import os
# データベースに接続
conn = mysql.connector.connect(
host=os.environ['DB_HOST'],
user=os.environ['DB_USER'],
password=os.environ['DB_PASSWORD'],
database=os.environ['DB_DATABASE']
)
cursor = conn.cursor()
# ... 以降、アプリの処理コードとか ...
コンフィグファイルではなく環境変数を利用する方法。こちらのほうが一般的かな。