電子工作作業報告書管理アプリその3
データベースをMySQLにしようと考えていたが、
アリンコス部品管理の記事でも書いた通りMySQLのデータベースの作成が
出来ない状況にあるので、別のデータベースにしようと
色々と調べてみた。3種類くらい見つかった
PostgreSQL(ポスグレ):複雑なクエリや大規模なデータベースを扱うことができる
機能豊富なデータベースです。Excelのような表形式で保存したデータを1つの箱とし、
別の箱と関連付けして、大量のデータを取り扱えるようにします。
テーブルとカラムの情報を扱う以外に、データ型・インデックス型・関数の定義ができます
カスタマイズ性が高く、プラグインの開発・導入はもちろん、C言語などで作られたカスタム関数を
組み入れることも可能
無料で使えること」「日本語に対応していること」「多機能かつ高性能であること」などが
挙げられます。日本語はバージョン6.3から実装されており、標準で使用できます。
ostgreSQLはオープンソースで、基本的に無償で利用できる点
PostgreSQLを利用している主なWebサービスとしては、YahooやFacebook、Instagram、
Skype、Appleなど
MariaDBの特徴
カラム型DBエンジン(ColumnStore)」が用いられており、
ビッグデータなどの集計作業を得意とする技術が採用
MariaDBは、MySQLから分岐して作成されたデータベースであり、
本質的な目的としてMySQLを将来的にも無料で提供することを保証するために作成されています
MySQLからMariaDBへの移行
基本的にはユーザーが利用しているMySQLのシステムをそのままMariaDBへ
移行することが可能なように開発が進められています。
MySQLで追加された新機能やバグ修正なども、若干のタイムラグは存在しますが
MariaDBにも適用されると考えて問題ないでしょう。
MySQLとMariaDBのコマンド操作
MySQLとMariaDBでは、利用出来るコマンドについてもほとんど同じと考えて問題ありません
MySQLとMariaDBどちらを選ぶのかに関してですが、これから新規開発を進める場合、
「MariaDB」がおすすめです。
理由としては、MySQLと基本的に使い方が同じであり、同様の機能をサポートすることが表明されているためです。
Redisの特徴
Webアプリケーションの高速化
RedisはインメモリのNoSQLデータベースのため、RDBよりも処理速度が高速です。
Webアプリケーションのセッションやキャッシュの一時的な保存先に指定することで、
アクセス速度が飛躍的に向上します。
常にメモリを消費する
メモリ上で動作するため常にメモリを消費します。
またメモリに乗り切るデータしか扱えないため、大容量のデータを一度に
取り扱うような処理はできません。
またメモリの断片化の問題もあります。大量のデータの書き込み・削除を繰り返すと
パフォーマンスが低下する
AirbnbはWebサイト経由で民宿などの宿泊施設を宣伝・予約できるシステムです。
AirbnbがRedisを使用しているのはAirbnbを利用するユーザーに
起きている問題を効率良く監視するためのダッシュボードでした。
Elasticsearchで予約チケットのデータを検索・分析し、結果をRedisに格納します。
この結果をフロントエンド側のReactアプリケーションが取得・表示する仕組みです。
という感じにまとめられた
PostgreSQLかMariaDBかな・・
アリンコス部品管理その5
MySQLを起動し、データベースの作成をしようとしたが、
MySQL_ConnectorJの設定でつまづいたので、記録しておく
データベース定義名」横の空欄に、「MySQL」と入力してください。
「ファイルの追加」をクリックし、
このファイルを指定します。設定が終わったら、「次へ」ボタンを押し
データベース接続の情報を設定する画面で
JDBC Driver(J)がドロップダウンで選択出来るようだが
選択肢が表示されず、classPATHが存在しないとエラーが出る
詳しく調べると
環境変数へ CLASSPATH を設定する方法
2.Eclipse(Pleiades All in One)のビルドバスへ CLASSPATH を設定する方法
を記載します。
mysql-connector-java-x.x.xx-bin.jar をコピー
Windows エクスプローラー(Windows ボタン+Eボタン)を開く
C:\Program Files\Java\jdk x.x.x_xxx\lib を開く
※xはインストールされている JDK のバージョンによって異なります。
先ほどコピーした mysql-connector-java-x.x.xx-bin.jar を貼り付け
貼り付けができたら、Windows エクスプローラーは閉じて構わない
次に、WIndows ボタン->コンピューターを右クリック->プロパティを選択
システムの詳細設定リンクをクリック
環境変数ボタンを押下
CLASSPATHが存在しない場合
「システム環境変数」の一覧に変数 CLASSPATHが存在しない場合は、
以下の登録をおこないます。
「システム環境変数」の下にある新規ボタンを押下します。
変数名: CLASSPATH
変数値: .;C:\Program Files\Java\jdk x.x.x_xxx\lib\mysql-connector-java-x.x.xx-bin.jar;
のような形式で記述します。
*xはフォルダ名、ファイル名と照らし合わせて、相違がないように記述します。
フォルダ名やファイル名は、名前をコピーした上で貼り付ける方法が
もっとも確実である。
CLASSPATHが存在する場合
「システム環境変数」の一覧にて、変数 CLASSPATH が存在する場合は、
以下の登録をおこないます。
CLASSPATH か゛表示されている列を選択
「システム環境変数」の下にある編集ボタンを押下
変数名: CLASSPATH
変数値: .;xxxxxxxxxxxxx.jar;C:\ProgramFiles\Java\jdkx.x.x_xxx\lib\mysql-connector-java-x.x.xx-bin.jar;
のような形式で追記します。
*xはフォルダ名、ファイル名と照らし合わせて、相違がないように記述します。
フォルダ名やファイル名は、名前をコピーした上で貼り付ける方法が
もっとも確実。
JDBCドライバとは、異なるデータベースに対するアクセスを行う際に、
個々のデータベース毎にプログラムを書き換えなくていいように、
データベースとJavaプログラムの間にあって
データベース毎の差を吸収してくれるものです。
よってJDBCを使えばデータベースが異なってもJavaプログラムの方は
変更を最小限にすることが可能です。逆にJDBCドライバはデータベース毎に
用意する必要がないというもの。
上記の方法を試して解決すると良いが
出来なかった場合どうするかなぁ・・
減量管理入力補助GUIその11
抽出するには、正規表現で探す方法があるみたい
そもそも正規表現とは、メタ文字と呼ばれる文字を使い
文字列の検索パターンを表す
つまり任意のテキストの中から検索パターンに合致する文字列を
抽出したり、置換したり出来る
正規表現を使うにはreモジュールをインポートする
pattern = r'2022/02/22' string = r'2022/02/22' #あらかじめ正規表現をコンパイルする prog = re.compile(pattern) #検索対象の文字列 result = prog.match(string) if result: print(result.group()) # 2022/02/22
これは、2022/02/22という文字列とマッチする正規表現を
探しているコードで
match関数は、先頭の文字列からパターンに一致するものを検索する際に利用
これだと2022/02/22固定を探すので、汎用性がない
pattern = r'[12]\d{3}[/\-年](0?[1-9]|1[0-2])[/\-月](0?[1-9]|[12][0-9]|3[01])日?$'
に書き換えると、2022/2/22のような日付にも対応できるので
これを以前考えたフローチャートに組み込んでも良いかもしれない
アリンコス部品管理その4
データベースの生成
データベースを作成するSQL文はCREATE DATABASE
CREATE DATABASE データベース名 [CHARACTER SET = 文字コード名, COLLATION = COLLATION名];
データベース作成時に利用できるオプションは文字コードCHARACTER SET
および文字の照合順序COLLATIONです。サーバ全体で文字コードを
指定している場合には個別のデータベースで再度指定する必要は通常はありません。
なんらかの理由で特定のデータベースの文字コードを変更したい場合のみに変更する
新しいデータベースが作成される。確認するためには、
画面左側のDBツリー・ビューの
「MySQL」の横の三角形の矢印をクリックするが
実際の操作画面は次回あたりに図をつけて掲載する
データベースの削除
作成したデータベースは、不要になれば削除することが出来ます。
その際、DROP DATABASE文を用います。使用方法は、以下の通りです。
データベースの削除
DROP DATABASE データベース名;
データベース内のすべてのテーブルが破棄され、データベースが削除される。
シンボリックリンクのあるデータベースに対して DROP DATABASE を実行すると、
リンクと元のデータベースとの両方が削除されます。
このコマンドの使用時には、十分に注意するか。
それと入力画面1を少し改良したのと
表示画面が完成したので載せておく
もしかしたら表示画面は今後改良するかも・・・
アリンコス部品管理その3
MySQLについて
MySQLは、複数のデータベースが定義できる為
複数の人が同時利用するような、Webアプリケーションのようなシステムに
適している。
補足として
データ型について説明すると同時に、どのデータ型でも現れる、
NULL(ヌル)値について説明しておきましょう。
NULL値はデータが存在しないことを表す値です。
文字列における空文字''や数値における0とは異なります。
テーブルを作成し、データを作成したものの、列情報を挿入する際に、
情報が追加されなかった列などがNULLになる。
フォーム画面だがkey設定(イベントを発生させる名前)を決めていなかった為
次のようなエラーメッセージが出た
keyに各名称をつけ再度コードを走らせると、無事にフォーム画面が起動した
その時の画面を貼っておく
入力画面1はイメージ図とは少し違うが、後で作り込めばいい
次はMySQLのデータベース生成などについての記事を書く
タスク管理Webアプリその5
setting.py設定続き
setting.py内のTEMPLETE_DIRS=~の部分を少し変更して以下のようにします。
こうしないと後で作るtemplatesというフォルダにパスが通らず、
manage.pyを起動しても「TemplateDoesNotExist at」というエラーが
表示されてサイトが表示されなくなるので、注意する。
テンプレートの設定
ここで言うテンプレートとは、表示させるURLの大まかな骨組みで、
タイトル、文章、サイトの見せ方の情報がhtmlとして格納されている
実務でサイトを作る場合は基本的にcssとJavascriptを組み合わせることで、
実際にあるサイトのように出来る。
アプリケーションを作成する場合は.htmlをtempletesに置き
、css・js・画像ファイルなどは「static」というフォルダに置くのが一般的です。
Django2.0では、「templates」「static」は自動で作成されないので自分で
新しくフォルダを作る必要があるみたい。
フォルダを作成したら、「templates」にhtmlファイルを置き、
「static」と名付けたフォルダにcssとjs(Javascriptのコードファイル)を
置く。
ここまで
タスク管理Webアプリその4
実際にサイトを作っていく前に
タスク管理Webアプリのプロジェクト名を決めておきたい
タスク管理を英名にするとTask managementなので
頭文字を撮りtmとする
動作環境としてはローカルPC(つまりネットに公開する事無く
自分のpc)で完結させる
スマホアプリやサイトなどのWebアプリケーションを作る上においては、
まずモデル(model)・ビュー(View)・コントロール(Control)という3つ
からなる「MVC」の概念をまず理解する必要がある。
ただしDjangoの場合は実は少し特殊で、DjangoはMVCではなく、model・templete・Viewの3つで
構成させる「MTV」という型でアプリケーションを構築します
これはWebアプリケーションにおける基本型のようなもので、
これが分かっていないと何も作れません
アプリ開発で使うプロジェクトフォルダを作成する
/Users/ユーザー名の直下にプロジェクトフォルダを作成します
右クリックでフォルダを作成
setting.pyの設定
プロジェクトとアプリケーションを作成したら、
次はtmdjango内にあるsetting.py(tmdjango/settings.py)という
pyファイルを編集します。
このsetting.pyとurls.pyは内部処理の要で「MVC」でいうところの
C(control)の部分だと言えます。
まずがsetting.pyの言語とタイムゾーンの部分を再設定をします。
デフォルトだと英語なのでjaに変更して日本語にします。
タイムゾーンもロンドンの標準時間なので日本時間に直します。
以下のように編集できていればOK。
次はtemplatesのパス設定を追記します。
Djangoのアプリケーションをローカル環境(自分のPC)で動かす場合は、
相対パスでフォルダを指定しても問題なく動きます。
ですが、サーバー等の本番環境で動作させたりすると、
ディレクトリの関係上、エラーが出ることが多く色んなブログを
見て回ったところsettings.pyでベースとなるディレクトリをBASE_DIRという変数で
定義するのが一般的みたいなのでそうする。
今回はこのあたりで終わり。