🐛
【python】とりあえず、DockerでSQL繋いでテーブル作るとこまでやってみました
はじめに
ここ最近体調を崩したり、別件の調べ物をしてて更新できていませんでした。
今回は番外編で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