🐛

【python】とりあえず、DockerでSQL繋いでテーブル作るとこまでやってみました

2022/07/24に公開

はじめに

ここ最近体調を崩したり、別件の調べ物をしてて更新できていませんでした。
今回は番外編でpythonでSQLを繋いで、テーブルを作るところまでやってみました。

Dockerの環境構築

フォルダ構成

work-
     ∟ mysql
       ∟ Dockerfile
       ∟ my.cnf
     ∟ python
       ∟ Dockerfile
       ∟ src
         ∟ make_table.py
     | dockercompose.yml
     

Dockerファイル

Docker-Composeファイル

docker-compose.yml
version: "3.9"
services:
app: 
  build:
    context: .
    dockerfile: ./python/Dockerfile
  image: "name001/pymysql"
  container_name: pymysqlclient
db:
  build:
    context: .
    dockerfile: ./mysql/Dockerfile
  ports:
    - target: 3306
      published: 3306
      protocol: tcp
      mode: host
  environment:
    - MYSQL_DATABASE=python_sample
    - MYSQL_USER=docker
    - MYSQL_PASSWORD=docker
    - MYSQL_ROOT_PASSWORD=docker

mysql Dockerファイル

Dockerfile
FROM mysql/mysql-server:8.0
LABEL maintainer="ucan-lab <yes@u-can.pro>"

ENV TZ=UTC

COPY ./mysql/my.cnf /etc/my.cnf
my.cnf
[mysqld]
# default
skip-host-cache
skip-name-resolve
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
secure-file-priv = /var/lib/mysql-files
user = mysql

pid-file = /var/run/mysqld/mysqld.pid

# character set / collation
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci

# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM

# Error Log
log-error = mysql-error.log

# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0

# General Log
general_log = 1
general_log_file = mysql-general.log

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4

python Dockerファイル

Dockerfile
FROM python:3.9.10-slim-buster

RUN apt-get update && \
    apt-get -y install gcc libmariadb-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
RUN /usr/local/bin/python -m pip install --upgrade pip
RUN pip install mysql-connector-python

COPY ./python/src/ /app/

WORKDIR /app

# ここにDocker起動時に起動するpythonファイルを書く(テーブルを作ったりする)
CMD python ./make_table.py

pythonファイル

make_table.py
import mysql.connector

connection = None

try:

    connection = mysql.connector.connect(
        host='db',
        user='docker',
        passwd='docker',
        db='python_sample')
    cursor = connection.cursor()
    sql = '''
        CREATE TABLE student (
        student_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        first_name VARCHAR(50) NULL,
        last_name VARCHAR(50) NULL,
        birthday DATE NULL,
        gender ENUM('F','M','E')
        )'''
    cursor.execute(sql)

    cursor.execute("SHOW TABLES")
    print(cursor.fetchall())

    cursor.close()

except Exception as e:
    print(f"Error Occurred: {e}")

finally:
    if connection is not None and connection.is_connected():
        connection.close()

起動コマンド

$ docker-compose build app
$ docker-compose up -d
$ docker-compose up app

最後に

一応テーブル作るところまでいけた。
次回はREST APIを作ろうと思います。

Discussion