ニックジャガー日記

勝手気ままだけど自分に素直なブログ

停滞

エラーが取れない

MySQLdb._exceptions.OperationalError: (1698, "Access denied for user 'root'@'localhost'")

このエラーでググると以下の質問が

 

teratail.com

 

で、この通りにやってみると

www.aiship.jp

 

この中にあるmysqldは実際はmysqlで。

www.t3a.jp

 

どれが正しいのかわからなくなってる

 

今は

$ service --status-all | grep mysql
[ - ] mysql

となりmysqlのサービスは停止している

これを

udo mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

となる

 

うーん、何か壊しちゃったのだろうか?

まだまだ先は遠いなぁ

 

 

061/100

#100DaysOfCode

 

また山が来た

全然MySQLがわからない

 

とりあえず、テーブル作ってデータをインサートするのは

MySQLクライアントからはできてけれど、

Pythonから接続するのに失敗する

 

方法はこちら

www.sejuku.net

 

ここで、importしてライブラリがないと言われたら

今まで通りpip3 install・・・とすればOK

 

www.craneto.co.jp

 

で、エラーが出る

MySQLdb._exceptions.OperationalError: (1698, "Access denied for user 'root'@'localhost'")

きっとMySQLの設定じゃないかな

 

こういうところにハマるときっと時間がかかる

また山が来た

 

調べよう

それも楽しみだ

 

 

060/100

#100DaysOfCode

selectの世界

MySQLをインストール

そしてデータベースを作る

 

参考にしたのは、AmazonのUnlimitedで読める本

ライトノベルで学ぶMySQL入門」

Kindle版で無料だから、MySQLubuntuにインストールした後、

これでちょっと触れてみた

 

インストール方法はこちら

qiita.com

 

この通りにやったら問題なくサーバーとクライアントが

インストールできた

 

そして、

先のMySQL入門でDBを作ってテーブル作ってデータ入れて見るところまでやった。

 

最初はこれで十分

 

この本、とっつきやすいかと思うと意外と読みにくい

だからちょっと他の本も調べてみる

 

こうやって本を読むのは

とても楽しいなぁ

 

059/100

#100DaysOfCode

 

次はデータベースへ挑戦

データが取得できたから、それを自分で作ったDBに

落としたい

 

そして、いつでも簡単に呼び出させたい

そう思ったので、第3段階はデータベースへの

データ入力を考える

 

データベースは会社ではPostgreSQLを使っている

MySQLは使ってない

 

とりあえずMySQLをやってみようかな

Ubuntu標準にはいっているみたいだし

 

違いを調べてみた

employment.en-japan.com

 

読んでみてもよくわからない

でも、単純なのはMySQLなのかな

 

とりあえず、こちらで進めてみようと思う

 

058/100

#100DaysOfCode

 

リストの中の辞書へのアプローチ

APIから送られてくるJSONファイルは辞書型にリスト型がネストしてあって、

そのリスト中に辞書型がネストされてる

 

リストの中から辞書型を取り出すのをどうしたらいいのかが

わかってなかった

 

いろいろやってわかった

リストへのアプローチはどれも同じなんだな

.getメソッドでなんでも取り出せる

今回はimageのURLが辞書型になっていて

それを取り出した

 

a_imageURL = d.get('imageURL',100)

 

.getメソッドのいいところは、データがなくても続けて取り出せるところだ

しかも、もしデータがなかったら指定したコードを返せる

直接指定するとエラーになってしまう

 

無事、URLを取り出したら今度はその画像をダウンロードした

qiita.com

ファイル名をいちいち決めるのは面倒だったので、

URLの最後の部分を抽出してファイル名にして保存

 

画像データはサイトの同じ階層にすべてあったので、

a_imageがURLの文字列だとすると

a_image[35:]

として、必要な部分だけを抽出してそれをファイル名として保存した

 

REST APIを叩いて、欲しい情報を抽出して、

バイナリーデータを保存

 

ここまで、できたんだなぁ

第2段階完了だ

 

ここまでできた

自分を褒めたい

 

 

057/100

#100DaysOfCode

 

 

 

リストと辞書の違い

いよいよjsonデータの一覧が取得できて

今度はそこから欲しいデータの取得をすることに

 

取得方法を調べた

データは入れ子(ネスト)状態になっている

 

なので、それ用のアプローチが必要

 

techacademy.jp

 

まずは上から順々に絞っていく

最初は'request'と'result'があったので、そこでd['result']とすれば、最初の階層は特定できる。そしてその下のネストにはd['result']['next']とすれば下の階層に降りれる

 

ここから少しハマった

 

辞書型だった構造が下に降りるとリスト型になってる

辞書型は{}だが、リスト型は[ ]だ

 

データを取得するのにリスト型だとfor d in data: とfor文でアプローチできるのに、辞書型はキーでアクセスする。そこの違いがわかってなかった。

 

qiita.com

 

今回、階層を降りるたびに 

print(type(data))

とやってみてリスト型か辞書型かを見て、リスト型だとわかると、そこからはfor文で取得できるようになった

for d in student:
student_name = d.get('name')
math = d.get('math')
eng = d.get('eng')
print(student_name+':'+str(math)+' '+str(eng))

 

これで名前と数学の点数、英語の点数をリストアップできた

 

一つ一つが勉強

毎日やることが大事

 

楽しいなぁ

 

 

056/100

#100DaysOfCode

なんてことはない。解決してた。

新しいurllib.requestを使おうとして複雑なことをやってたのが、

間違いだったのかな?

 

前の天気予報を読み取る方式で、なんのことはない、できた。

シンプルが一番いい

 

それを喚起させてくれたのが、この記事

 

hibiki-press.tech

import requests,pprint,json

---略

res = requests.get(url)
pprint.pprint(res.json())
json_data = res.json()

with open(output01_json,'w') as f:
   json.dump(json_data,f,indent=4,ensure_ascii=False) 

 urlにGETしたいURL(URI)を設定して、あとは天気予報でやった通りのコードで動いてしまった。

 

なんか、あっけない。

 

でも、一度動いたコードは何回も応用が効くんだな、

それがわかった。

だからこそ、コードは短くても理解しなきゃな。

 

もっと他の情報もとってみよう。

楽しみが増えて嬉しい。

 

乗り越えるたびに、何か発見があってほんと楽しい。

 

055/100

#100DaysOfCode