クリエイターの教科書

ChatGPT, Stable Diffusion, Visual Studio, Excelなど教科書

【Visual Studioの教科書】PythonでMySQLを利用するには?

うちの場合Windows10の入ったPCへMySQLがインストール済みなので、Pythonからどうやって接続するか調べてみました。

「mysql-connector-python」というライブラリをインストール、インポートして接続。あとはSQL文を発行すれば制御できました。

PythonでMySQL

Day 139: New functions

ライブラリのインストール

まずはMySQL用ライブラリをインストールします。

 

Visual Studioの場合、「ツール>Python>Python環境」を実行。

「パッケージ」で「pip install mysql-connector-python」といれて実行します。

f:id:apicode:20201204094220p:plain

 

SQL文の発行

まずは「import mysql.connector」でライブラリをインポート。

「mysql.connector.connect」でユーザ名、パスワード、ホスト名、データベース名をセットします。

 

以下は、ユーザ名root、パスワード1111、ホスト名localhost、データベース名mydatabaseの場合です。

import mysql.connector

connector = mysql.connector.connect(user='root', password='1111', host='localhost', database='mydatabase')

 

次にデータを取得します。MySQLで使うSQL文を発行します。下の例では「select * from app_stock where id=1;」というSQLでapp_stockテーブルでidが1のものをピックアップします。

cursor = connector.cursor()

cursor.execute("select * from app_stock where id=1;")

 

あとは取得したデータrowの情報をprint文で表示して確認しましょう。

for row in cursor.fetchall():
  print(row[0])

 

作業が終わったら、それぞれのオブジェクトを破棄します。

cursor.close
connector.close

 

工程としては以上ですので、あとはSQL文を変更したり、レコードを取得しての処理を書いていけばよいでしょう。

 

SQLでデータを更新

SQL文で「UPDATE ~ SET ~」を使えばデータを更新できます。

ただそれだけではなぜかエラーは起きないのにデータは変更できませんでした。

 

調べてみると、変更後に「commit」というコマンドを実行しないとデータが保存されないようです。

 

以下のようにUPDATE文を実行後に「commit」を実行したら、無事レコードは更新されていました。

cursor.execute('UPDATE app_stock SET tag="abakadabura" WHERE id=1;')
connector.commit()

 

 

エラーの確認

接続を確認する

「is_connected」関数でTrueになれば接続できています。

print(connector.is_connected())

 

原因を調べる

エラー原因を確認するには、以下のように「try~except」を使ってコネクターの「Error」を取得します。

 

試しに存在しないテーブル「no_db」を探すSQLを実行してみます。

try:
    cursor.execute("select * from no_db where id=1;")
except mysql.connector.Error as e:
    print("Error code:", e.errno)
    print("Error message:", e.msg)

 

するとエラーコード「1146」エラーメッセージ「テーブル~doesn't exist(存在しない)」となりました。

f:id:apicode:20201204101738j:plain

 

エラーがすぐわかりますので、「try~except」を使って書いておくのがいいと思います。

 

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 当サイトの情報によって生じたいかなる損失について一切の責任を負わないものとします. あらかじめご了承ください。

プライバシーポリシー |〇利用規約 |〇問い合わせ