docker-composeでPythonとPostgreSQLを同時起動します.
dockerの設定
ファイル構成
project_dir
├── /db
│ ├── /psgl
│ └── Dockerfile
└── docker-compose.yml
/db/DockerFile
js
FROM postgres:14
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
./docker-compose.yml
js
version: "3"
services:
# postgres
postgres:
build: ./db
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgre
POSTGRES_PASSWORD: postgre
LANG: ja_JP.UTF-8
volumes:
- ./db/psgl:/var/lib/postgresql/data
notebook:
# https://hub.docker.com/r/jupyter/datascience-notebookからimageをpullする
image: jupyter/datascience-notebook
# ポートの設定("ホスト:コンテナ")
user: root
ports:
- "8888:8888"
# 環境変数の設定
environment:
- JUPYTER_ENABLE_LAB=yes
- "GRANT_SUDO=yes"
# ボリューム(データの永続化の場所)の設定(ホスト:コンテナ)
# ホスト内のworkディレクトリとコンテナ内の/home/jovyan/workディレクトリが紐づいているイメージ
volumes:
- ./:/home/jovyan/work
# postgres -> notebook
depends_on:
- postgres
# 最後にjupyterLabに接続するためのコマンドを実行する。
command: start-notebook.sh --NotebookApp.token=''
ライブラリのインストール
下記のコードでライブラリをインストールします.
python
!sudo apt-get update
!sudo apt-get -y install libpq-dev gcc
!pip install psycopg2
postgreSQLの操作
postgreSQLの接続確認
python
import os
import psycopg2
# DATABASE_URL='postgresql://postgre:postgre@localhost:5432/postgres'
DATABASE_URL='postgresql://postgre:postgre@workspace-postgres-1:5432/postgres'
def main():
cursor = psycopg2.connect(DATABASE_URL)
print(cursor)
if __name__ == '__main__':
main()
データベース一覧の確認
python
import os
import psycopg2
# DATABASE_URL='postgresql://postgre:postgre@localhost:5432/postgres'
DATABASE_URL='postgresql://postgre:postgre@workspace-postgres-1:5432/postgres'
def main():
# postgresの接続
conn = psycopg2.connect(DATABASE_URL)
print(conn.autocommit)
cur = conn.cursor()
# データベース一覧の確認
cur.execute('SELECT datname FROM pg_database;')
data = cur.fetchall() # 出力結果
print(data)
# dbとカーソルを閉じる
cur.close()
conn.close()
if __name__ == '__main__':
main()
データベースの作成
python
import os
import psycopg2
# DATABASE_URL='postgresql://postgre:postgre@localhost:5432/postgres'
DATABASE_URL='postgresql://postgre:postgre@workspace-postgres-1:5432/postgres'
def main():
# postgresの接続
conn = psycopg2.connect(DATABASE_URL)
conn.autocommit = True # 操作の重複を防ぐ(databaseの操作)呪文
cur = conn.cursor()
# データベースの削除
cur.execute('CREATE database db_test1')
# データベース一覧の確認
cur.execute('SELECT datname FROM pg_database;')
data = cur.fetchall() # 出力結果
print(data)
# dbとカーソルを閉じる
cur.close()
conn.close()
if __name__ == '__main__':
main()
データベースの削除
python
import os
import psycopg2
# DATABASE_URL='postgresql://postgre:postgre@localhost:5432/postgres'
DATABASE_URL='postgresql://postgre:postgre@workspace-postgres-1:5432/postgres'
def main():
# postgresの接続
conn = psycopg2.connect(DATABASE_URL)
conn.autocommit = True # 操作の重複を防ぐ(databaseの操作)呪文
cur = conn.cursor()
# データベースの作成
cur.execute('DROP database db_test')
# データベース一覧の確認
cur.execute('SELECT datname FROM pg_database;')
data = cur.fetchall() # 出力結果
print(data)
# dbとカーソルを閉じる
cur.close()
conn.close()
if __name__ == '__main__':
main()
テーブル一覧の表示
python
import os
import psycopg2
# DATABASE_URL='postgresql://postgre:postgre@localhost:5432/postgres'
DATABASE_URL='postgresql://postgre:postgre@workspace-postgres-1:5432/postgres'
def main():
# postgresの接続
conn = psycopg2.connect(DATABASE_URL)
print(conn.autocommit)
cur = conn.cursor()
# データベース一覧の確認
query = '''
SELECT t.*
FROM (
SELECT TABLENAME,SCHEMANAME,'table' as TYPE from PG_TABLES
UNION SELECT VIEWNAME,SCHEMANAME,'view' as TYPE from PG_VIEWS
) t
WHERE TABLENAME LIKE LOWER('{0}')
and SCHEMANAME like LOWER('{1}')
and TYPE like LOWER('{2}')'''
cur.execute(query)
data = cur.fetchall() # 出力結果
print(data)
# dbとカーソルを閉じる
cur.close()
conn.close()
if __name__ == '__main__':
main()
まとめ
docker-composeでPythonとpostgreSQLを同時起動しました.
参考サイト
docker compose
Dockerコンテナ上のPythonプログラムからPostgreSQLに接続する
日本語モードのPostgreSQL, pgAdmin4同時起動docker-compose.yaml
docker-composeでDjangoとPostgreSQLを連携した構築手順(VPS環境)
Docker Compose の depends_on の使い方まとめ
Python + PostgreSQL
Pythonでpsycopg2を使用しPostgreSQLデータベースを作成する
[DROP DATABASE]((https://www.postgresql.jp/document/9.4/html/sql-dropdatabase.html)