Python操作MySQLデータベースの例を詳しく説明する。


本論文の例は、Python動作MySQLデータベースについて述べる。皆さんに参考にしてあげます。具体的には以下の通りです。
1、据え付け
Pythonを通じてMySQLデータベースに多くのライブラリを接続しています。ここでは、公式に推奨されているMySQL Connector/Pythonライブラリを使って、その公式サイトはhttps://dev.mysql.com/doc/connector-python/en/です。
pipコマンドでインストール:

pip install mysql-connector-python

デフォルトでインストールされているのは最新バージョンで、私がインストールしたのは8.0.17で、MySQLの8.0バージョンに対応しています。MySQLは、関連ツールの大きなバージョン番号を統一しています。同じまたはより高いものが互換性があります。例えば私が使っているのはMySQL 8.0です。8以下のmysql-connectorを使うとエラーが発生します。実際にも、いくつかの古い文書でpip install mysql-connectorのインストールを提示すると、より低いバージョンがインストールされます。MySQLに接続すると、次のようにエラーが発生します。
mysql.co nnector.errors.Not SupportedError:Authentication plugn'caching_shar 2_password'is not supported
これは、mysql 8.0がUse Strong Password Ecryption for Authenticationを使用しています。低いバージョンのmysql-connectorは古いmysqlを採用しています。native_password暗号化により接続できなくなりますので、データベースと互換性のあるバージョンを使用してください。
2、接続
connector類のconnect()方法でデータベースの接続ができます。サーバ、ポート番号、ユーザー名、パスワード、データベースなどのパラメータが入ってきます。サーバーとポート番号は省略できます。デフォルトはlocalhost:3306です。

import mysql.connector
db = mysql.connector.connect(
  host='localhost',
  port='3306',
  user="root",
  password="123456",
  database="test"
)

3、データベース、テーブル操作
データベース、データテーブルの動作はモード定義言語(DDL)に属し、すべてのDDL文の実行は、cursorというデータ構造に依存して行われる。connectオブジェクトからcursorオブジェクトを取得することでデータベース、テーブルの関連操作ができます。たとえば、データベース、データテーブルを作成します。

#       cursor
cursor = db.cursor()
#      
cursor.execute("CREATE DATABASE mydatabase")
#      
dbcursor.execute("CREATE TABLE customers (name varchar(255),address varchar(255))")
#      
dbcursor.execute('ALTER TABLE customers ADD COLUMN id INT PRIMARY KEY AUTO_INCREMENT')
#              
cursor.execute("show tables")
for table in cursor:
  print(table)

4、添削
挿入、削除、変更は依然としてcursorオブジェクトによって実現され、SQL操作は、cursorのexecute()方法によって実行され、最初のパラメータはSQL文であり、2番目のパラメータは文に充填される変数である。
すべてのSQL操作を実行した後、データベースオブジェクトのcomit()を通じて操作事務をデータベースに提出してください。キャンセルが必要なら、rollback()方法でロールバックします。
SQL文の変数は%sの形でプレースホルダとして使用できます。そしてpythonのタプルの形で実行時に変数を下記のように記入します。
なお、どのタイプのデータも、着信時に文字列タイプとして扱われ、SQL操作時に文字列が対応するタイプに変換されるため、ここのプレースホルダは%sであり、%d、%fなどはない。

#     SQL  
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
#           
val = ('Mike', 'Main street 20')
#     
cursor.execute(sql, val)
#     
db.commit()

変数をpythonの辞書で埋めることもできます。SQL文のプレースホルダには対応する変数名が必要です。

#  SQL        
sql = "INSERT INTO customers (name, address) VALUES (%(name)s, %(address)s)"
#           
val = {
  'name': 'Alice',
  'address': 'Center street 22'
}
cursor.execute(sql, val)

一度に複数のデータを挿入する必要がある場合は、executemeny()方法を使用して、複数のデータを配列で第二のパラメータに渡すことができます。
cursorのrowcount属性によって成功操作のデータバー数に戻ります。lastrowid属性は最後に成功的に挿入された行のidです。

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
#           
val = [
 ('Peter', 'Lowstreet 4'),
 ('Amy', 'Apple st 652'),
 ('Hannah', 'Mountain 21'),
]
cursor.executemany(sql, val)
print("    %d   ,     id :%d" % (cursor.rowcount, cursor.lastrowid))

データを変更、削除する方法は挿入と似ています。対応するSQL文と変数値をexecute()関数に送るだけでいいです。MySQL-connectorライブラリの操作は、元のSQL言語に非常に近いことが分かります。

#     
sql = "UPDATE customers SET address=%s WHERE name=%s"
val = ('Center street 21', 'Mike')
cursor.execute(sql, val)
#     
sql = "DELETE FROM customers WHERE name=%s"
val = ('Hannah',)
cursor.execute(sql, val)

5、お問い合わせ
クエリーを実行する前と同様に、execute()を通じて対応するSQL文を実行し、実行時に該当するデータを記入すればいいです。照会が完了したら、結果集会はcursorに保存されます。直接にcursorをローズマリーiteratorとして展開し、結果集のデータごとの対応フィールドを取得することができます。すべてまたは一つの結果集は、cursorのfetch all()、fetch one()の方法で取得することもできます。

#   customers  id  6 8        name、address  
query = "SELECT name,address FROM customers WHERE id BETWEEN %s AND %s"
cursor.execute(query, (6, 8))
#                 
for (name, address) in cursor:
  print("%s     %s" % (name, address))
#      :
# Peter     Lowstreet 4
# Amy     Apple st 652
# Hannah     Mountain 21

元のSQL文によって、クエリー条件をwhereに設定し、Order byによってフィールド並べ替え、Limitによって結果バー数を設定し、OFFSETクエリー結果セットのオフセットを設定し、Joinによってテーブル接続操作を行うなど、より複雑なクエリー動作が可能である。
もっとPythonに関する内容に興味がある読者は、当駅のテーマを調べてもいいです。「Pythonのよくあるデータベース操作技術のまとめ」、「Python数学演算テクニックのまとめ」、「Pythonデータ構造とアルゴリズム教程」、「Python関数使用テクニックのまとめ」、「Python文字列操作テクニックのまとめ」、「Python入門と階段の経典教程」および「Pythonファイルとディレクトリ操作の概要
ここで述べたように、皆様のPythonプログラムの設計に役に立ちます。