Python操作MySQLデータベースの例を詳しく説明する。
5770 ワード
本論文の例は、Python動作MySQLデータベースについて述べる。皆さんに参考にしてあげます。具体的には以下の通りです。
1、据え付け
Pythonを通じてMySQLデータベースに多くのライブラリを接続しています。ここでは、公式に推奨されているMySQL Connector/Pythonライブラリを使って、その公式サイトはhttps://dev.mysql.com/doc/connector-python/en/です。
pipコマンドでインストール:
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です。
データベース、データテーブルの動作はモード定義言語(DDL)に属し、すべてのDDL文の実行は、cursorというデータ構造に依存して行われる。connectオブジェクトからcursorオブジェクトを取得することでデータベース、テーブルの関連操作ができます。たとえば、データベース、データテーブルを作成します。
挿入、削除、変更は依然としてcursorオブジェクトによって実現され、SQL操作は、cursorのexecute()方法によって実行され、最初のパラメータはSQL文であり、2番目のパラメータは文に充填される変数である。
すべてのSQL操作を実行した後、データベースオブジェクトのcomit()を通じて操作事務をデータベースに提出してください。キャンセルが必要なら、rollback()方法でロールバックします。
SQL文の変数は%sの形でプレースホルダとして使用できます。そしてpythonのタプルの形で実行時に変数を下記のように記入します。
なお、どのタイプのデータも、着信時に文字列タイプとして扱われ、SQL操作時に文字列が対応するタイプに変換されるため、ここのプレースホルダは%sであり、%d、%fなどはない。
cursorのrowcount属性によって成功操作のデータバー数に戻ります。lastrowid属性は最後に成功的に挿入された行のidです。
クエリーを実行する前と同様に、execute()を通じて対応するSQL文を実行し、実行時に該当するデータを記入すればいいです。照会が完了したら、結果集会はcursorに保存されます。直接にcursorをローズマリーiteratorとして展開し、結果集のデータごとの対応フィールドを取得することができます。すべてまたは一つの結果集は、cursorのfetch all()、fetch one()の方法で取得することもできます。
もっとPythonに関する内容に興味がある読者は、当駅のテーマを調べてもいいです。「Pythonのよくあるデータベース操作技術のまとめ」、「Python数学演算テクニックのまとめ」、「Pythonデータ構造とアルゴリズム教程」、「Python関数使用テクニックのまとめ」、「Python文字列操作テクニックのまとめ」、「Python入門と階段の経典教程」および「Pythonファイルとディレクトリ操作の概要」
ここで述べたように、皆様のPythonプログラムの設計に役に立ちます。
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プログラムの設計に役に立ちます。