20190927のMySQLに関する記事は2件です。

SQLServer(OBIC7)でのIF文について

現在、ERPソフト(OBIC7)を使用しておりその中での、関数設定(SQLServer)についての質問になります。
企業向けのソフトウェアになるので、ネット上でも殆ど情報が無く困っております。

佐川急便の伝票発行システムの取込みに対応するため(1項目、全角16文字まで)

品名1(16)
品名2(16)
品名3(16)
品名4(16)
品名5(16)

したい事

===================================================
出荷リストを全角化して出力(ベンダーの関数で解決済)
関数名:dbo.fc_UCA0000_ConvertVarcharToWideVarchar

16文字単位でのCAST
(1-16文字:商品名1)
(16-32文字:商品名2)
(32-48文字:商品名3)

SQL文

商品名1(カラム)
全角に変換した文字列1文字目から16文字目を書き込みたい

SUBSTRING(CAST(dbo.fc_UCA0000_ConvertVarcharToWideVarchar(商品名) AS VARCHAR(96)),1,16)

商品名2
全角に変換した文字列16文字目から32文字目を書き込みたい
SUBSTRING(CAST(dbo.fc_UCA0000_ConvertVarcharToWideVarchar(商品名) AS VARCHAR(96)),16,16)

商品名2
全角に変換した文字列32文字目から48文字目を書き込みたい
SUBSTRING(CAST(dbo.fc_UCA0000_ConvertVarcharToWideVarchar() AS VARCHAR(96)),32,16)

==================================================

商品名が10文字程度の場合は商品名1のカラムのみ書き込まれ、2と3は空欄を希望
    25文字程度の場合は商品名1&2のカラムが実行され、3は空欄
    35文字程度の場合は商品名1&2&3が実行

商品名2と3のカラムは、IF文で囲むべきなのでしょうか?
ERPのエラーが出ておりますが、あまり有益になりそうな情報は無さそうです。

情報を記載しきれていれないかもしれませんが、ご教授のほどよろしくお願い致します。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker-composeを使用した Django + uWSGI + Nginx + MySQL ローカル開発環境の構築

Djangoローカル開発環境の構築

DjangoとMySQLとNginxを使用してそれぞれのコンテナを作成します。
Nginxでリクエストを受け取りuWSGIでDjangoへ接続。
Djangoで使用するDBをMySQLとする構成です。

Docker-composeを使用してまとめます。

ディレクトリ構成

最初のディレクトリ構成は以下の通りです。
それぞれディレクトリで分けてそれぞれのDockerfileを作成します。
後でDjangoプロジェクトを作成するのでアプリケーションのディレクトリが追加されます。

directory-struct
<work-dir>
  docker-compose.yml
  mysql/
    Dockerfile
    my.cnf
    data/
    sql/
      init.sql
  nginx/
    Dockerfile
    nginx.conf
  python/
    Dockerfile
    requirements.txt
    uwsgi.ini

ファイルの中

docker-compose

docker-compose.yml
version: "3"
services:
  pythonapp:
    build: ./python
    volumes:
      - ./python:/var/www
    links:
      - mysql
    ports:
      - "3031:3031"
      - "8000:8000"
    environment:
      TZ: "Asia/Tokyo"

  mysql:
    build: ./mysql
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/sql:/docker-entrypoint-initdb.d
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    ports:
      - "3306:3306"
    environment:
      TZ: "Asia/Tokyo"
      MYSQL_ROOT_PASSWORD: "{root-password}"

  nginx:
    build: ./nginx
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    links:
      - pythonapp
    ports:
      - "4231:80"
    environment:
      TZ: "Asia/Tokyo"

MySQL

MySQLは日本語化の為にUTF-8にしています。

mysql/Dockerfile
FROM mysql:5.7

CMD ["mysqld"]
mysql/my.cnf
[mysqld]
character-set-server=utf8
max_allowed_packet=1G

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8

init.sqlでDjangoで使用するDBと接続用のユーザーを作成します。

init.sql
CREATE DATABASE IF NOT EXISTS {db-name} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER IF NOT EXISTS '{user-name}'@'%' IDENTIFIED BY '{password}';
GRANT ALL PRIVILEGES ON {db-name}.* TO '{user-name}'@'%';

FLUSH PRIVILEGES;

Nginx

3031番ポートを使用してuWSGI経由でDjangoに接続します。

nginx/Dockerfile
FROM nginx:1.17.3
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]
nginx/nginx.conf
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    upstream uwsgi {
        server pythonapp:3031;
    }

    server {
        listen 80;
        charset utf-8;

        location / {
            include uwsgi_params;
            uwsgi_pass uwsgi;
        }
    }
}

Django

MySQLへの接続にはMySQLClientを使用します。
Djangoが推奨していたはず。PyMySQLは使用できなくなった(?)。

python/Dockerfile
FROM python:3.7.4

RUN mkdir -p /var/www

WORKDIR /var/www

COPY requirements.txt ./

RUN pip install -U pip setuptools && \
    pip install --no-cache-dir -r requirements.txt

WORKDIR /var/www/{work-dir}

CMD ["uwsgi", "--ini", "/var/www/uwsgi.ini"]
#CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
python/requirements.txt
Django==2.2.5
mysqlclient==1.4.4
uWSGI==2.0.18

{project-name}は任意ですが後でDjangoで作成するプロジェクト名と一致させておく必要があります。

python/uwsgi.ini
[uwsgi]

chdir = /var/www/{project-name}
module = {project-name}.wsgi:application

master = true
vacuum = true

processes = 1
socket = :3031
chmod-socket = 666
die-on-term = true
py-autoreload = 1

# ログの設定
# logto = /dev/stdout #default#
#logto = /var/www/uwsgi.log

Django project 作成

プロジェクトの作成。

同じ名前のディレクトリが再帰的に2つ作られます。

console
$ docker-compose run pythonapp django-admin startproject {project-name} ./

MySQLを使用するので設定を書き換える

settings のDB設定にMySQLへの接続情報を記載する

python/{project-name}/{project-name}/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

python/{project-name}/{project-name}/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '{db-name}',
        'USER': '{user-name}',
        'PASSWORD': '{password}',
        'HOST': 'mysql',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
            'sql_mode': 'TRADITIONAL,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY',
        },
    },
}

MySQLにマイグレーション

console
$ docker-compose run pythonapp python manage.py makemigrations
$ docker-compose run pythonapp python manage.py migrate
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む