- 投稿日:2019-09-27T18:46:30+09:00
SQLServer(OBIC7)でのIF文について
現在、ERPソフト(OBIC7)を使用しておりその中での、関数設定(SQLServer)についての質問になります。
企業向けのソフトウェアになるので、ネット上でも殆ど情報が無く困っております。佐川急便の伝票発行システムの取込みに対応するため(1項目、全角16文字まで)
品名1(16)
品名2(16)
品名3(16)
品名4(16)
品名5(16)したい事
===================================================
出荷リストを全角化して出力(ベンダーの関数で解決済)
関数名:dbo.fc_UCA0000_ConvertVarcharToWideVarchar16文字単位での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のエラーが出ておりますが、あまり有益になりそうな情報は無さそうです。情報を記載しきれていれないかもしれませんが、ご教授のほどよろしくお願い致します。
- 投稿日:2019-09-27T15:56:02+09:00
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.ymlversion: "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/DockerfileFROM 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=utf8init.sqlでDjangoで使用するDBと接続用のユーザーを作成します。
init.sqlCREATE 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/DockerfileFROM nginx:1.17.3 CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]nginx/nginx.confuser 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/DockerfileFROM 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.txtDjango==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.logDjango project 作成
プロジェクトの作成。
同じ名前のディレクトリが再帰的に2つ作られます。
console$ docker-compose run pythonapp django-admin startproject {project-name} ./MySQLを使用するので設定を書き換える
settings のDB設定にMySQLへの接続情報を記載する
python/{project-name}/{project-name}/settings.pyDATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }↓
python/{project-name}/{project-name}/settings.pyDATABASES = { '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