version: "3.5"
services:
db:
image: mysql:latest
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: fil
MYSQL_DATABASE: doc
MYSQL_USER: fil
MYSQL_PASSWORD: fil
python-test:
image: python:3
build: .
depends_on:
- db
from sqlalchemy import create_engine, Table, MetaData, Column, BIGINT, String, Integer, FLOAT
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
import pymysql
pymysql.install_as_MySQLdb()
engine = create_engine("mysql://fil:fil@db/doc", encoding="utf8", echo=True)
Base = declarative_base()
Session = sessionmaker(bind=engine)
class Doc(Base):
__tablename__ = 'Docker'
def __init__(self, text):
self.text = text
id = Column(BIGINT, primary_key=True, autoincrement=True)
text = Column(String(100))
Base.metadata.create_all(engine)
session = Session()
session.add(Doc('text'))
session.commit()
class User(models.Model):
avatar = models.ImageField(upload_to=upload_to, default=get_default_profile_avatar)
def get_default_profile_avatar() -> str:
static_avatar_dir = settings.DEFAULT_PROFILE_AVATAR_DIR
media_avatar_dir = settings.MEDIA_PROFILE_AVATAR_ROOT
return _get_default_avatar(static_avatar_dir, media_avatar_dir)
def _get_default_avatar(static_dir, media_dir):
all_avatars = [avatar for avatar in os.listdir(static_dir) if os.path.isfile(os.path.join(static_dir, avatar))]
avatar_file = choice(all_avatars)
static_img = os.path.join(static_dir, avatar_file)
media_img = os.path.join(media_dir, avatar_file)
_check_avatar_existence(static_img, media_img)
img_path = media_img.replace(f'{settings.MEDIA_ROOT}/', '')
return img_path
def _check_avatar_existence(static_img: str, media_img: str) -> None:
root_dir = os.path.join(
'/',
*media_img.split('/')[:-1]
)
if not os.path.isdir(root_dir):
os.makedirs(root_dir)
if not os.path.exists(media_img):
copyfile(static_img, media_img)
2) примерно такая последовательность: сервис бд стартует, компос получает калбэк и запускает питон скрипт. НО при этом сама СУБД в контейнере еще не готова принимать запросы, она создает БД, юзера и занимается еще какой-то ерундой.
3) не совсем понял, что ты хочешь. Если ты хочешь, чтобы у тебя этот скрипт постоянно запускался, то у тебя 2 варианта:
1. ставишь в крон задачу docker-compose build python-test docker-compose run --rm python-test
2. в самом скрипте делаешь слип на нужный тебе период