2021年1月12日Python開発50日目

かなり記録をさぼりました。

というのも前に全く進まないから。

なので、50日以上経ってます。

 

だって、プログラムって間違えずに書かないと動かないから

 

報告すらできないのですよ。

 

# Module Imports
import mysql.connector as mydb
import json
import sys
import requests

conn = mydb.connect(
    host='localhost',
    port='3306',
    user='',
    password='',
    database='kayumi'
)
conn.ping(reconnect=True)
# APIをゲットする
url = 'APIのアクセス先'
response = requests.get(url)
jsonData = response.json()
print(jsonData)
json_text = json.dumps(jsonDataindent=2ensure_ascii=False)

# mysqlに挿入
mycursor = conn.cursor()
sql = "INSERT INTO kayumi (content) VALUES (%s);"

mycursor.execute(sql, (json_text,))
conn.commit()

#print(mycursor.rowcount, "record inserted.")

print(sql)
# cursor.close()
# 接続できているかどうか確認
print(conn.is_connected())

こんな感じでPythonで書きました。

 

これは何かというと。

 

MariaDBというデータベースに自動入力するというコードです。

 

これで完成ですが、大変でした。

 

そもそも入力ができなかったです。

 

最初に書いたコードがこちらです。

 

失敗したコード

# Module Imports
import mysql.connector as mydb
import json
import sys
import requestsconn = mydb.connect(
    host='localhost',
    port='3306',
    user='root',
    password='',
    database='kayumi'
)
conn.ping(reconnect=True)
# APIをゲットする
url = 'APIのアクセス先'
response = requests.get(url)
jsonData = response.json()
print(jsonData)# mysqlに挿入←ここから失敗してるようです
mycursor = conn.cursor()
sql = "INSERT INTO kayumi (content) VALUES (%s)"mycursor.execute(sql, (jsonData,))
conn.commit()print(mycursor.rowcount, "record inserted.")print(sql)
# cursor.close()
# 接続できているかどうか確認
print(conn.is_connected())

出てきた出力はこちら

これを、コマンドプロンプトを使ってプログラムを実行したところ。

 

こんな結果が出ました。

During handling of the above exception, another exception occurred:Traceback (most recent call last):
  File "C:\Users\junio\Documents\kayumi\app.py", line 25, in <module>
    mycursor.execute(sql, (jsonData,))
  File "C:\Users\junio\AppData\Roaming\Python\Python39\site-packages\mysql\connector\cursor.py", line 557, in execute
    psub = _ParamSubstitutor(self._process_params(params))
  File "C:\Users\junio\AppData\Roaming\Python\Python39\site-packages\mysql\connector\cursor.py", line 436, in _process_params
    raise errors.ProgrammingError(
mysql.connector.errors.ProgrammingError: Failed processing format-parameters; Python 'list' cannot be converted to a MySQL type

意味が分からないですね。

 

これを、プログラムを学んでいる仲間に投げました。

 

mysql.connector.errors.ProgrammingError: Failed processing format-parameters; Python 'list' cannot be converted to a MySQL type

 

この部分が、list型になっているのでMySQLに合わないですよ。

 

という意味だと教えてもらいました。

 

MySQLでjsonを保存するというサイトを見つけました。

 

参考にしたサイト

 

なので、json型になるようにと

 

json.dumpsというのがいるらしい。

 

なので、挿入してみると。

 

日本語が文字化けする

僕のデータはこんな感じです。

 

[{'place': '名古屋', 'humidity': '69.5', 'max_temp': '6', 'min_temp': '-1', 'temp_index': '-', 'sweat_index': '-', 'pollen_index': '-', 'kosa_pm_index': 'やや注意'}, {'place': '東京', 'humidity': '45.083333333333336', 'max_temp': '6.5', 'min_temp': '-1.3', 'temp_index': '-', 'sweat_index': '-', 'pollen_index': '-', 'kosa_pm_index': 'やや注意'}, {'place': '大阪', 'humidity': '55.333333333333336', 'max_temp': '6.8', 'min_temp': '-0.3', 'temp_index': '-', 'sweat_index': '-', 'pollen_index': '-', 'kosa_pm_index': 'やや注意'}, {'place': '福岡', 'humidity': '68.20833333333333', 'max_temp': '7.6', 'min_temp': '1.7', 'temp_index': '-', 'sweat_index': '-', 'pollen_index': '-', 'kosa_pm_index': '注意'}]

INSERT INTO kayumi (content) VALUES (%s);

 

ですが、データベースに入力すると

[{"place": "\u540d\u53e4\u5c4b", "humidity": "58.625", "max_temp": "5.8", "min_temp": "-1.8", "temp_index": "-", "sweat_index": "-", "pollen_index": "-", "kosa_pm_index": "-"}, {"place": "\u6771\u4eac", "humidity": "41.75", "max_temp": "8.1", "min_temp": "-2.4", "temp_index": "\u6ce8\u610f", "sweat_index": "-", "pollen_index": "-", "kosa_pm_index": "-"}, {"place": "\u5927\u962a", "humidity": "49.833333333333336", "max_temp": "6.1", "min_temp": "-1.4", "temp_index": "-", "sweat_index": "-", "pollen_index": "-", "kosa_pm_index": "-"}, {"place": "\u798f\u5ca1", "humidity": "60.666666666666664", "max_temp": "5.7", "min_temp": "0.9", "temp_index": "-", "sweat_index": "-", "pollen_index": "-", "kosa_pm_index": "\u6ce8\u610f"}

なんじゃこれ???

 

怖いんですよ、わけわからんのがコンピューターに出ると。

 

文字化けなんですけどね

 

ちなみに文字化けというのは、言葉が表示されずに意味不明の言葉が並ぶことです。

 

あ~~、こわ。

 

恐ろしい。

 

どうやら日本語はコンピューターと会話するのに向いてないな。

 

ふて寝ですよ、ふて寝。

 

嫌になる、とにかく失敗失敗。

 

というぼやきを、LINEのタイムラインに打ち込むと。

 

「それ、入力側で指定したら直ると思います。」ってパソコンに詳しい友人から。

 

あ~~~~~~~~。

 

ということで調べると。

 

あった。

 

jsonデータを整えて入力する方法

 

おぉぉぉぉぉぉ。

 

そして、最初のコードになります。

 

さてさてさてさて。

 

プログラム実行

 

 

結果はいかに

  3 | [

  {

    "place": "名古屋",

    "humidity": "69.5",

    "max_temp": "6",

    "min_temp": "-1",

    "temp_index": "-",

    "sweat_index": "-",

    "pollen_index": "-",

    "kosa_pm_index": "やや注意"

  },

  {

    "place": "東京",

    "humidity": "45.083333333333336",

    "max_temp": "6.5",

    "min_temp": "-1.3",

    "temp_index": "-",

    "sweat_index": "-",

    "pollen_index": "-",

    "kosa_pm_index": "やや注意"

  },

  {

    "place": "大阪",

    "humidity": "55.333333333333336",

    "max_temp": "6.8",

    "min_temp": "-0.3",

    "temp_index": "-",

    "sweat_index": "-",

    "pollen_index": "-",

    "kosa_pm_index": "やや注意"

  },

  {

    "place": "福岡",

    "humidity": "68.20833333333333",

    "max_temp": "7.6",

    "min_temp": "1.7",

    "temp_index": "-",

    "sweat_index": "-",

    "pollen_index": "-",

    "kosa_pm_index": "注意"

  }

] | 2021-01-12 08:55:21 |

できた~~~~~~。

 

3個目のデータは、これです。

 

そして最後に、プログラムを実行した日時まで入ってますね。

 

最初は、Node.jsというプログラム言語でやっていて。

 

厳しくなり。

 

得意なPythonでやってみたけど、それでもうまくいかなくて。

 

いろいろな人から教えてもらい。

 

データを記録することができました。

 

これを蓄積していけば、かゆみの予測アプリを開発できます。

 

さて、次に取り掛かります。

 

次は、気象庁の過去の天気を元にかゆみ予測を行います。