- 投稿日:2020-11-17T23:54:31+09:00
mySQLコマンドまとめ
大学のデータベースの授業のノートみたいなものです。
起動
$mysql.server start $mysql -uroot終了
exit;SELECT文
SELECT 列名 FROM 表 WHERE 条件;全てを指定は
*
COUNT関数
SELECT COUNT(*) FROM 表;表の中の全ての行数を求める
GROUP BY句
項目ごとにグループ化
平均値の計算や集計を行う際に使用。
HAVING句
GROUP BYの結果に対して条件を付与する
ODER BY句
データを並べ替え
ASC
で昇順,DESC
で降順。新規データベースを作成
create databese データベース名;データベース一覧を表示
show databases;データベースを指定
use データベース名;表の作成
create table 表のタイトル(列名 データ型,… ,)データ型は intやfloatなど
charの場合はchar(5)のように最大文字数を指定。
データの挿入
INSERT INTO 表のタイトル (列名,…) VALUES (データ,…);削除
DELETE FROM 表の名前;表全部削除
DELETE FROM 表の名前 WHERE 削除する条件;条件に当てはまるものを削除
表の更新
UPDATE 表の名前 SET 列名=値 WHERE 行選択の条件;SET のところで四則演算も可能。
- 投稿日:2020-11-17T23:47:30+09:00
cargoでの複数のユニットテストを順番に実行したかったのは、DB操作で汚れちまったテーブルのクリアを最後にしたかったからなのだ。
diesel
でMySQL
を制御しているRust
のコードがありました。
cargo test
で色々とデータベースを操作した後に、すっかり汚れちまったテーブルを放置しておくと次回のテストが失敗するので、ターミナルからコマンドを叩いてテーブルをクリアしていたわけです。$ mysql -uroot -ppassword -h127.0.0.1 -e'truncate table test_database.test_teble;'毎回叩くのも面倒なので、
cargo test
と一緒にやりたい。それがささやかな望みでした。// Clean up the test_table #[test] fn test_cleanup_hash_file() { let conn = setup(); diesel::sql_query("truncate table test_db.file_hashes").execute(&conn).unwrap(); }こんな感じで、ユニットテストのコードを追加して
$ cargo test
しました。ファイルの最後に書いたので、最後に実行されてテーブルがクリアされるでしょう。そう信じて疑いませんでした。
しかし、現実は厳しいものです。そう簡単に希望を叶えてくれることはありませんでした。とっとと結論をいいますが、
cargo test
によるユニットテストは 並行実行 ってコトらしいです。今回の例でいうと、テーブルのクリアがどのタイミングで実行されるかがわからないので、テーブルクリア前提のテストは成功するか保証できないということです。
基本的に各ユニットテストはそれぞれで完結させるべきなのでしょう。
まあ、今回のように最後に後片付けしたいってコトは、DB操作とかのプログラムではありがちかもなので、どうしても順番に実行したい場合は
$ cargo test -- --test-threads=1こうゃって。
テストを1スレッドで実行(マルチスレッドで並行実行しない)が、正解でした。めでたしめでたし。
- 投稿日:2020-11-17T22:38:35+09:00
【MySQL】MySQLでデータベースに接続するまでの手順
こんにちは。
今日はMySQLでデータベースに接続するまでの手順を説明していきたいと思います。前提条件
MySQLをインストールしていて、起動している状態で始めます。
まだインストールをしていない方はターミナルなどでインストールしてから試してみてください。開発環境
macOS Big Sur 11.0.1
MySQL 8.0.22MySQLにログインする
まずはターミナルで
mysql -uroot
と入力します。Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.22 Homebrew Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>このように表示されたら上手くログインできました。
データベースを作成する
次にデータベースを作成するコマンドを実行します。
mysql> CREATE DATABASE `mysql_test`;すると
Query OK, 1 row affected (0.01 sec)このように表示されます。ちゃんとデータベースを作成できたようです。
念の為、データベースを確認してみます。
show databases();を実行すると、
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql_test | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)ちゃんと
mysql_test
が作成されました!データベースに接続する
次は作成したデータベースに接続しましょう。
まずは
SELECT database();
で現在接続しているデータベースを確認してみます。mysql> SELECT database(); ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 11 Current database: *** NONE *** +------------+ | database() | +------------+ | NULL | +------------+ 1 row in set (0.00 sec)現在はどのデータベースにも接続されていないみたいです。
use データベース名;
で接続したいデータベースに接続することができるので試してみると、mysql> use mysql_test; Database changed接続できました。
念の為確認すると、mysql> SELECT database(); +--------------+ | database() | +--------------+ | mysql_test | +--------------+ 1 row in set (0.00 sec)しっかりと接続できていることが分かります!
これでデータベースに接続するまでの手順をお見せすることができました。
まとめ
Laravelとは少し手順が違うのでどちらもできるように頑張ります~
Laravelでの手順を知りたい方は是非こちらもご覧ください。
LaravelでMySQLにログインするまで
Laravelでデータベース(MySQL)を作成し、接続をする。
- 投稿日:2020-11-17T21:53:27+09:00
[OCI]リソース・マネージャを使って、MYSQL Database Serviceを作成してみた (2020/11/15)
この記事では、OCIのマネージドTerraform環境であるリソース・マネージャを使って、MySQL Database Serviceを作成してみたことを紹介します。
リソース・マネージャとは
Oracle Cloud Infrastructureリソースをプロビジョニングするプロセスを自動化できるOracle Cloud Infrastructureサービス
「infrastructure-as-code」モデルを使用してリソースをインストール、構成、および管理するのに役立つTerraformのマネージド環境リソース・マネージャの機能
リソース・マネージャは以下のような特徴、機能があります(2020/11/15時点)
- インフラストラクチャの自動化と標準化、環境のレプリケーションを容易に行う
- Terraform エンジンのフルマネージドサービス
- 指定したコンパートメントのリソースをTerraform構成ファイルの生成(Resource Discovery)
- GitLabで管理されたTerraform構成ファイルからリソース・マネージャスタックの作成(構成ソース・プロバイダ)
- スタックの最後に実行された構成と実際(現在)のインフラストラクチャの状態との差分抽出(ドリフト検出)
- サンプル構成を使った環境構築
- 使用できる Terraform フォーマットは v0.11/v0.12/v0.13以下のサンプルは Terraform v0.12 フォーマットで記載しています。
MYSQL Database Service 作成サンプル
使用している変数
- mysql_configuration_id:MYSQL Database ServiceのコンフィグレーションID
- mysql_password :管理者ユーザパスワード
- mysql_shape :MYSQL Database Serviceで利用するシェイプ
- privateSubnet_id :サブネットOCID
指定している名前
- admin_username :管理者ユーザ名(admin)
- hostname_label/display_name:ホスト名(mysql1)
そのほかはデフォルト設定を指定
mysql.tfresource oci_mysql_mysql_db_system export_MySQL1 { admin_password = var.mysql_password admin_username = "admin" availability_domain = data.oci_identity_availability_domain.TGjA-AD-1.name backup_policy { is_enabled = "true" retention_in_days = "7" window_start_time = "00:00" } compartment_id = var.compartment_ocid configuration_id = var.mysql_configuration_id data_storage_size_in_gb = "50" display_name = "MySQL1" fault_domain = "FAULT-DOMAIN-1" hostname_label = "mysql1" maintenance { window_start_time = "WEDNESDAY 04:22" } # mysql_version = "8.0.22-u2-cloud" port = "3306" port_x = "33060" shape_name = var.mysql_shape state = "ACTIVE" subnet_id = var.privateSubnet_id lifecycle { ignore_changes = [admin_password, admin_username] } } data oci_identity_availability_domain export_TGjA-AD-1 { compartment_id = var.compartment_ocid ad_number = "1" }サンプル環境の作成
MySQL Database Serviceを構築する例として以下の構成を作成
コンピュートインスタンスにnginxとphpをインストールし、wordpressモジュールを展開、MySQL Database ServiceにDatabaseとユーザを作成しています。
Terraform構成ファイルはgithubからダウンロード可能です。環境構築の実行
1.Webコンソールのメニューから「リソース・マネージャ」>「スタック」を開き「スタックの作成」をクリック
2.githubから入手したtfファイルを圧縮したZIPファイルもしくはフォルダを指定してリソース・マネージャスタックを作成
3. 計画ジョブ・適用ジョブを実行サンプルファイルの補足
予約済パブリックIPの使用
コンピュートインスタンスとロード・バランサには、それぞれ予約済パブリックIPを割り当ててみた
予約済パブリックIPの生成
publicip.tfresource oci_core_public_ip publicip_lb { compartment_id = var.compartment_ocid display_name = "lb01" lifetime = "RESERVED" }コンピュートインスタンスへの割り当て
パブリックIPを割り当てるVNIC、プライベートIPのOCIDを取得し、予約済パブリックIPを割り当てる
publicip_compute.tfdata oci_identity_availability_domain AD-1 { compartment_id = var.compartment_ocid ad_number = "1" } data oci_core_vnic_attachments instance1_vnics { availability_domain = data.oci_identity_availability_domain.AD-1.name compartment_id = var.compartment_ocid instance_id = oci_core_instance.ap1.id } data oci_core_vnic instance1_primary_vnic { vnic_id = data.oci_core_vnic_attachments.instance1_vnics.vnic_attachments[0].vnic_id } data oci_core_private_ips instance1_ip { vnic_id = data.oci_core_vnic.instance1_primary_vnic.id } resource oci_core_public_ip publicip_ap { compartment_id = var.compartment_ocid display_name = "ap01" lifetime = "RESERVED" private_ip_id = data.oci_core_private_ips.instance1_ip.private_ips[0].id }ロード・バランサへの割り当て
publicip_lb.tfresource oci_load_balancer_load_balancer LB1 { compartment_id = var.compartment_ocid display_name = "LB1" ip_mode = "IPV4" is_private = "false" reserved_ips { id = oci_core_public_ip.publicip_lb.id } network_security_group_ids = [ oci_core_network_security_group.export_Network-Security-Group-for-AP.id, ] shape = "100Mbps" subnet_ids = [ oci_core_subnet.export_PublicSubnet.id, ] }適用ジョブログ
適用ジョブのログに、ロードバランサ、APサーバのパブリックIPアドレスとAPサーバへのsshログイン用秘密鍵ファイル内容が出力される
wordpressの初期設定
コンピュートインスタンスのパブリックIPアドレスに ブラウザで httpアクセスすることで wordpress 初期画面が表示されることを確認
http://<コンピュートインスタンスパブリックIPアドレス>/
おわりに
OCIの Terraform マネージドサービスのリソース・マネージャを使用して MySQL Database Serviceおよびそれにアクセスするコンピュートインスタンスにwordpress環境をデプロイしてみた。
- 投稿日:2020-11-17T21:41:30+09:00
MySQLで取得結果にランクをつける
金額の高い順にランクをつける。
対象のテーブル
select * from products +-----------+-------+ | name | price | +-----------+-------+ | スイカ | 80 | | バナナ | 50 | | ぶどう | 50 | | みかん | 100 | | りんご | 50 | | レモン | 30 | +-----------+-------+相関サブクエリを用いる方法
SELECT P1.name, P1.price, ( SELECT COUNT(P2.price) FROM Products P2 WHERE P2.price > P1.price ) + 1 AS rank_1 FROM Products P1 ORDER BY rank_1; +-----------+-------+--------+ | name | price | rank_1 | +-----------+-------+--------+ | みかん | 100 | 1 | | スイカ | 80 | 2 | | バナナ | 50 | 3 | | ぶどう | 50 | 3 | | りんご | 50 | 3 | | レモン | 30 | 6 | +-----------+-------+--------+ランクを0から始めたい場合、+1を消せば良い。
また、count(distinct p2.price)とすれば、
同じ順位にならず、飛び石でランクがつけられる。みかんのrank_1の値に1がつく理由としては、
みかんのprice(100)以上のレコードがないため、
where P2.price > P1.priceをcountした結果が0になるため。また、自己結合を用いる方法もある。
SELECT P1.name, MAX(P1.price) AS price, COUNT(P2.name) +1 AS rank_1 FROM Products P1 LEFT OUTER JOIN Products P2 ON P1.price < P2.price GROUP BY P1.name ORDER BY rank_1;こちらを参考にさせていただきました。
達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ
- 投稿日:2020-11-17T20:56:20+09:00
[備忘録]MySQLのコマンド
データベース
ローカル環境でMySQLに接続する
$ mysql -u ユーザー名 -p [データベース名]データベースの新規作成
MySql> CREATE DATABASE [任意のデータベース名];データベースの表示
MySql> SHOW DATABASES;データベースの選択
MySql> USE データベース名;データベースの削除
MySql> DROP DATABASE [任意のデータベース名];ログアウト
MySql> EXIT;テーブル
テーブルの作成
MySql> CREATE TABLE テーブル名 (カラム名1 データ型1, カラム名2 データ型2, ...);(例)idカラムとnameカラムを持ったcategoriesテーブルを作成
MySql> CREATE TABLE categories (id INT, name VARCHAR(100));データ型の種類
データ型 意味 INT 数値 DECIMAL 少数。例えば DECIMAL(5, 2) とした場合、小数点以下が2桁、全体で5桁の数値を格納することができる。この場合、格納できる値は、-999.99 から 999.99 の範囲になります。 VARCHAR(文字数) 文字列。後ろにカッコで文字数を指定して使う。VARCHAR(100) のように指定すると、ひとつのフィールドに100文字まで保存できる。 DATETIME 日時。 DATE 日付。 テーブルの一覧表示
MySql> SHOW TABLES;テーブルの削除
MySql> DROP TABLE テーブル名;
- 投稿日:2020-11-17T18:56:56+09:00
DockerでMySQLのコンテナが立ち上がらない
Docker使っててMySQLのコンテナが立ち上がらない現象にでくわしました。
原因はわかってないですが解決したので、一旦メモを残します環境
- Docker Desktop ver 2.5.0.1
- Docker Compose ver 1.27.4
- MySQL 8
先に結論
Use gRPC FUSE for file sharing をdisableにして Apply & Restart。
起きたこと
docker-compose up -dを実行して
Creating network "xxx" with the default driver Creating xxx_architecture_mysqldata_1 ... done Creating xxx_mailhog_1 ... done Creating xxx_architecture_mysql_1 ... done Creating xxx ... doneの状態になったのですが、作業中にMySQL起因のエラーが発生。
確認してみる
docker ps
まず
docker psで何が立ち上がっているのか確認しましたが、MySQLのコンテナは立ち上がっていないようでした。
docker execでMySQLのコンテナに入れるのか試してもみましたが...Error response from daemon: Container コンテナID is not runningだめでした。
docker-compose upしたときはdoneと出ていたので立ち上がっているものと思っていましたが...。
ログを見てみる
とりあえずこういう時はログを見てみないとなんとも言えないので、とりあえずログを確認します。
docker logs コンテナIDログはこんな感じ
2020-11-17 07:30:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started. 2020-11-17 07:30:23+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2020-11-17 07:30:23+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started. 2020-11-17T07:30:24.278825Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2020-11-17T07:30:24.279399Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 1 2020-11-17T07:30:24.298133Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive 2020-11-17T07:30:26.062069Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('2') and data dictionary ('0'). 2020-11-17T07:30:26.064235Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 2020-11-17T07:30:26.064751Z 0 [ERROR] [MY-010119] [Server] Aborting 2020-11-17T07:30:26.944800Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.↓ここでなんか失敗してますね
2020-11-17T07:30:26.064235Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 2020-11-17T07:30:26.064751Z 0 [ERROR] [MY-010119] [Server] Abortingとりあえずbuildしなおしてみる
いろいろググるのがめんどくさくてbuildしなおしました。
docker-compose build --no-cachebuildが終わったので docker logs でログを見てみましょう。
2020-11-17 08:07:48+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started. 2020-11-17 08:07:49+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2020-11-17 08:07:49+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started. 2020-11-17T08:07:49.831146Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2020-11-17T08:07:49.831363Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 1 2020-11-17T08:07:49.854161Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive 2020-11-17T08:07:51.391894Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('2') and data dictionary ('0'). 2020-11-17T08:07:51.392387Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 2020-11-17T08:07:51.392606Z 0 [ERROR] [MY-010119] [Server] Aborting 2020-11-17T08:07:52.248666Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.なおってへんやん
解決した方法
Docker DesktopのPreferences > Experimental Features で
Use gRPC FUSE for file sharing
をdisableにしてApply & Restartその後docker-compose upしたら普通に立ち上がりました。
ちなみに別プロジェクトではほぼ同じセッティングでMySQL5.7を使用しており、そちらではUse gRPC FUSE for file sharingがenableになっていても全く問題ありませんでした。
MySQLのバージョン違いで起こる問題なんでしょうか
- 投稿日:2020-11-17T16:08:01+09:00
InterventionImageで編集した画像ファイルをbase64変換してMySQLに保存する
やりたいこと
InterventionImageで編集した画像ファイルをバイナリーに変換してMySQLに保存したい
もちろん画像ファイルは/public配下やS3などのファイルシステムに保存するのが定石なのは承知の上で、今回は手軽さを優先してDBに画像ファイル自体をtextカラムに保存する環境
% sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H2 % docker version Client: Docker Engine - Community Cloud integration: 1.0.1 Version: 19.03.13 API version: 1.40 # php -v PHP 7.4.7 (cli) (built: Jun 11 2020 18:41:17) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Xdebug v2.9.6, Copyright (c) 2002-2020, by Derick Rethans # php artisan -v Laravel Framework 7.26.1 # mysql --version mysql Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using EditLine wrapperIntervention Image とは
ImageMagikの上位互換?のモダンな画像編集パッケージ
リサイズ、トリミング、フィルターとなんでも手軽にできるっぽい
詳しくは公式doc参照MySQLに画像バイナリを保存する
UserControllerpublic function update(Request $request, User $user) { // InterventionImageで加工&保存 $file = $request->file('profile_img'); $img = Image::make($file); $img->fit(400); //400px * 400px にトリム&リサイズ $bin = base64_encode($img->encode('png')); $user->profile_img = $bin; $user->save(); return redirect()->route('user.index'); }ポイントは
$bin = base64_encode($img->encode('png'));
の1行。
base64_encodeする前に一度InterventionImageインスタンスをエンコードしている。
この処理がないとbase64_encodeしても空文字が生成される。なぜかはよくわからない。
- 投稿日:2020-11-17T11:41:14+09:00
ESP32とMySQLとXAMPPを使ってWiFi強度(RSSI)をリアルタイムで閲覧したい
たまにネットワークが途切れるがどのネットワークが強いのか接続しないと分からないなぁ。のひとことから勉強のつもりで作ってみました。
esp32でRSSIを取得するコードがなかなかみつからなかったのでここに残します。
arduino ideのソースコードに関してはほぼ初心者でhtmlは今回の件で初めて触りました。
自分で見てもかなり見にくいのでアドバイスもいただけますと幸いです。
もちろん市販品のほうが性能もよく見やすいのは承知です。今回の目標
①esp32でRSSIを取得しMySQLへ蓄積。
②MySQLに蓄積されたデータをxamppを使い社内のみブラウザで閲覧できるようにする。①の攻略
まずソースコードは以下の通り。
環境設定をしたarduino ideへ。esp32_wifi_power_complete.ino#include <SPI.h> #include <WiFi.h> #include <MySQL_Connection.h> #include <MySQL_Cursor.h> const char ssid[] = "*******"; const char pass[] = "*******"; //ESP32のIPアドレス IPAddress ip(***, **, **, ***); IPAddress gateway(***, **, **, *); IPAddress subnet(255, 255, 255, 0); // Wifi 通信用 WiFiClient client; // SQLサーバーのIPアドレス IPAddress server( ***, **, **, ***); // SQLユーザー名 char user[] = "*******"; // SQLパスワード char password[] = "*********"; // SQLコマンド用 MySQL_Connection conn ((Client *)&client); char INSERT_SQL[] = "INSERT INTO schemas名.テーブル名(要素①, 要素②, 要素③, RSSI) VALUES('***', '***', '****', %ld)"; long get_current(void); void insert_data(long); void setup() { Serial.begin(115200); WiFi.config(ip, gateway, subnet); WiFi.begin(ssid, pass); Serial.println("WiFi connecting"); Serial.println(WiFi.localIP()); //SQLサーバへの接続 Serial.println("Connecting Database"); if (conn.connect(server, 3306, user, password)) { delay(10000); } else { Serial.print("Connection failed!"); } //SQLサーバの切断 conn.close(); } void loop () { int i; while (WiFi.status() != WL_CONNECTED) { Serial.println("Couldn't get a wifi connection"); WiFi.begin(ssid, pass); delay(1000); } long rssi = WiFi.RSSI(); Serial.print("RSSI:"); Serial.println(rssi); Serial.println(ssid); delay(1000); //SQLサーバへの接続 Serial.println("Connecting Database"); if (conn.connect(server, 3306, user, password)) { delay(1000); //データの書き込み insert_data(rssi); } else { delay(1000); Serial.print("Connection failed!"); } conn.close(); //26秒待つ for (i = 0; i < 26; i++) { delay(1000); } } //SQLサーバへの書き込み void insert_data(long rssi) { char buf[600]; Serial.print("Recording data="); Serial.println(rssi); sprintf(buf, INSERT_SQL, rssi); //SQLの書き込みオブジェクトの作成 MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn); //SQLの書き込み cur_mem->execute(buf); //SQLの書き込みオブジェクトの開放 delete cur_mem; }MySQLの使い方やarduino ideでのESP32の環境設定などはわかりやすいサイトが多くありますのでそちらをご覧ください。
いろんなところから引き抜いてきたコードなので不要な箇所もあるかもしれませんが一応正常に動作しています。
以前まで動作中にWiFi接続が切れてしまうことやMySQLへの接続がきれてしまうことがありましたが、このプログラムに変更してから切断されても再接続できるようになりました。
私は初心者なのでMySQL Workbenchで確認をしていますがもちろんコマンドプロンプトからも可能です。
データが送られていることが確認できれば①は攻略です。
自分の努力の割に説明することが少ないので不明な点はご質問ください。
随時更新します。
②の攻略
MySQLにデータを蓄積することは今までも経験があったのですが、正直そこで満足していました。
でもせっかく時間があるので社内のみで見れないかな~と考えていた時に出会ったのがxamppです。
xamppについては以下のページが鬼分かりやすかったのでリンクを貼っておきます。markdown:https://www.adminweb.jp/xampp/
Markdown:https://techacademy.jp/magazine/1722これらの基礎を踏まえて以下のコードになりました。
test.php<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>タイトル</title> <style> h1{ color: blue; } h1{ background: white} body{ background: black } body{ text-align: center } .first{ border: double 10px brown } h1{ border-bottom: dotted 5px brown } .side{ display: flex; justify-content: space-around; } body{ color: white;} </style> </head> <body> <h1>表題</h1> <div class="first"> <h2>強度の見方</h2> <p>RSSI=0 ・・・世界最強</p> <p>RSSI=-50 ・・・結構いい</p> <p>RSSI=-75 ・・・普通</p> <p>RSSI=-100 ・・・接続不可</p> </div> <div class="data"> <h2>Shinto 1F</h2> <?php $dsn = 'mysql:dbname=*******;host=localhost'; $user = '******'; $password = '*******'; try{ $dbh = new PDO($dsn, $user, $password); $sql = 'select * from **** where **** = "*********" order by PK desc limit 1'; foreach ($dbh->query($sql) as $row) { print($row['*****'].' *****'); print($row['*****'].' *****'); print($row['****']); print('<br />'); } } catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } ?> </div> </body> </html>そして
http://*****/test.phpにアクセスするとまあ見れるぐらいのものが表示されるはずです。終わりに
もし興味があればご連絡下さい。
一応ほぼ0からの素人が0から作ったのである程度は説明できると思うのですが投稿するのになれてなさ過ぎてなにを書けばいいかさっぱりです。
連絡いただければ必ず返答しますのでお許しください。。。今後はHTMLの勉強をしてかっこいいページをつくりたいですね
- 投稿日:2020-11-17T11:00:07+09:00
pythonでのMysqlの使い方
はじめに
この記事はYoloで受け取ったデータをもとに可視化する為の方法として,Mysqlを利用する方法を記入していくつもりです.
Mysqlの使い方は以下の記事を参考に記事にしていきたいと思います.Python + mysql-connector-python の使い方まとめ
https://qiita.com/valzer0/items/2f27ba98397fa7ff0d74環境
python8.x
xamppを利用(Mysql)使用しているライブラリ
mysql.connector
データベースの構成
databasename:mask
table:mask-ok-or-ng1
カラム:3
name format day day time time ok-or-ng text 実装したコード
def sqlng(): day = datetime.date.today() time1 = datetime.datetime.now() conn = mydb.connect( host='127.0.0.1', port='3306', user='userid',#ユーザidの記入 password='password',#パスワードの記入 database='databasename'#データベースの名前を記入 ) # コネクションが切れた時に再接続してくれるよう設定 conn.ping(reconnect=True) # 接続できているかどうか確認 print(conn.is_connected()) cur = conn.cursor() time2=str(time1.hour)+":"+str(time1.minute)+":"+str(time1.second) print(day) print(time2) cur.execute("INSERT INTO `mask-ok-or-ng1` (`day`, `time`, `ok-or-ng`)"+ "VALUES"+ "("+"'"+str(day)+"'"+","+"'"+str(time1)+"'"+","+"'NG')") conn.commit() cur.close() conn.close()工夫している点としては,任意の変数をデータベースに挿入するときに,参照記事のやり方だとタプル型は使えないとエラーを吐かれたので上記のやり方でやりました.
# executemanyで複数データを一度に挿入 records = [ (5, 'MONA', 3000), (6, 'XP', 1000), ] cur.executemany("INSERT INTO test_table VALUES (%s, %s, %s)", records)このやり方だとエラーを吐いた.
ここを下記のようにした.cur.execute("INSERT INTO `mask-ok-or-ng1` (`day`, `time`, `ok-or-ng`)"+ "VALUES"+ "("+"'"+str(day)+"'"+","+"'"+str(time1)+"'"+","+"'NG')")最後に
これは個人的なメモ的に残しているので参考になると幸いです.
- 投稿日:2020-11-17T06:50:13+09:00
Golang mysql CREATE DATABASE IF NOT EXISTS
こんにちは!Golang 勉強中です!
今回はDB作成〜接続を行なっていきます!
DB接続の方法はすぐに見つかりましたが、DB作成は手動でしている記事が多い印象でした。
直接Mysqlから実行ではなく、GOからオートマチックに操作したかったので方法を調べてみました。package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) // DbConnection grobal var DbConnection *sql.DB func checkDb() { DbConnection, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/") if err != nil { panic(err) } defer DbConnection.Close() _, err = DbConnection.Exec("CREATE DATABASE IF NOT EXISTS db_name") if err != nil { panic(err) } DbConnection.Close() return } func main() { checkDb() }packageがimportできてないとエラーが出るので適宜importしてください!
以下解説
こちらのコードでmysqlと接続しています
"root:@tcp(127.0.0.1:3306)/"
root ユーザー名
:以降 パスワード (今回はルートユーザーなのでパスワードなしです)
@以降 プロトコルmysqlと接続後にこちらのコードでDBの存在チェックと作成を行います。
DbConnection.Exec("CREATE DATABASE IF NOT EXISTS db_name")
関数を呼び出して実行します。
func main() { checkDb() }以上です!
DBの操作はORMを使っていきたいと思ってます!
ご指摘あればぜひお願いします!