Ubuntu18.04でPythonを使用してMariaDBにデータを保存および取得する方法
著者は、 Write forDOnationsプログラムの一環として寄付を受け取るためにTechEducationFundを選択しました。
序章
MariaDB は、データにアクセスして管理するためのSQLインターフェイスを備えた人気のあるMySQLリレーショナルデータベース管理システム(DBMS)のオープンソースバージョンです。 信頼性が高く、管理が容易です。これは、最新のアプリケーションに対応できるDBMSの本質的な品質です。 人工知能や機械学習などのテクノロジーでPythonの人気が高まっているため、MariaDBはPythonのデータベースサーバーに適したオプションです。
このチュートリアルでは、MySQLコネクタを使用してPythonアプリケーションをデータベースサーバーに接続します。 このモジュールを使用すると、アプリケーション内からデータベースサーバーでクエリを実行できます。 Ubuntu 18.04でPython環境用にMariaDBをセットアップし、MariaDBに接続してクエリを実行するPythonスクリプトを記述します。
前提条件
このガイドを開始する前に、次のものが必要です。
- Ubuntu18.04初期サーバーセットアップガイドに従ってセットアップされた1GB以上のRAMを備えた1台のUbuntu18.04サーバー(sudo非rootユーザーとファイアウォールを含む)。
- サーバーにPythonがインストールされています。 Pythonのインストール方法とプログラミング環境のセットアップ方法チュートリアルに従ってください。
- サーバーにMariaDBがインストールされています。 MariaDBのインストール方法のチュートリアルに従ってください。 チュートリアルの後半で使用するため、認証資格情報(ユーザー名とパスワード)を必ずメモしてください。
ステップ1—準備とインストール
このステップでは、MariaDBにデータベースとテーブルを作成します。
まず、ターミナルを開き、次のコマンドを使用してターミナルからMariaDBシェルに入ります。
- sudo mysql
MariaDBシェルに入ると、ターミナルプロンプトが変わります。 このチュートリアルでは、workplace
という名前のサンプル従業員データベースとemployees
という名前のテーブルに接続するPythonを記述します。
workplace
データベースを作成することから始めます。
- CREATE DATABASE workplace;
次に、現在のデータベースとしてworkplace
を使用するようにMariaDBに指示します。
- USE workplace;
次の出力が表示されます。これは、これ以降に実行するすべてのクエリがworkplace
データベースで有効になることを意味します。
OutputDatabase changed
次に、employees
テーブルを作成します。
- CREATE TABLE employees (first_name CHAR(35), last_name CHAR(35));
テーブルスキーマでは、パラメータfirst_name
およびlast_name
は、最大長が35
の文字列(CHAR
)として指定されています。
これに続いて、MariaDBシェルを終了します。
- exit;
ターミナルに戻り、MariaDB認証資格情報を環境変数としてエクスポートします。
- export username="username"
- export password="password"
この手法により、スクリプト内にプレーンテキストでクレデンシャルを追加することを回避できます。
プロジェクトの環境を設定しました。 次に、スクリプトの作成を開始し、データベースに接続します。
ステップ2—データベースへの接続
このステップでは、 MySQL Connector をインストールし、データベースをセットアップします。
ターミナルで、次のコマンドを実行してコネクタをインストールします。
- pip3 install mysql-connector-python
pip
は、Pythonの標準パッケージマネージャーです。 mysql-connector-python
は、データベースコネクタのPythonモジュールです。
コネクタが正常にインストールされたら、新しいファイルPythonファイルを作成して開きます。
- nano database.py
開いたファイルで、import
キーワードを使用して、osモジュールとmysql.connector
モジュールをインポートします。
import os
import mysql.connector as database
ここでのas
キーワードは、コードの残りの部分でmysql.connector
がdatabase
として参照されることを意味します。
次に、Python変数としてエクスポートした認証クレデンシャルを初期化します。
. . .
username = os.environ.get("username")
password = os.environ.get("password")
database
が提供するconnect()
メソッドを使用して、データベース接続をフォローアップして確立します。 このメソッドは、クライアントの資格情報を指定する一連の名前付き引数を取ります。
. . .
connection = database.connect(
user=username,
password=password,
host=localhost,
database="workplace")
database.connect()
メソッドの呼び出しを保持するconnection
という名前の変数を宣言します。 メソッド内で、user
、password
、host
、およびdatabase
引数に値を割り当てます。 ユーザーとパスワードについては、MariaDB認証資格情報を参照します。 同じシステムでデータベースを実行している場合、ホストはデフォルトでlocalhost
になります。
最後に、接続でcursor()
メソッドを呼び出して、データベースカーソルを取得します。
. . .
cursor = connection.cursor()
cursor は、データセットから一度に1行ずつデータを取得し、更新するデータベースオブジェクトです。
次のステップのためにファイルを開いたままにしておきます。
これで、資格情報を使用してMariaDBに接続できます。 次に、スクリプトを使用してデータベースにエントリを追加します。
ステップ3—データの追加
データベースカーソルでexecute()
メソッドを使用して、このステップでデータベースにエントリを追加します。
関数add_data()
を定義して、従業員の名前と名前を引数として受け入れます。 関数内に、try/exceptブロックを作成します。 カーソルオブジェクトの後に次のコードを追加します。
. . .
def add_data(first_name, last_name):
try:
statement = "INSERT INTO employees (first_name,last_name) VALUES (%s, %s)"
data = (first_name, last_name)
cursor.execute(statement, data)
connection.commit()
print("Successfully added entry to database")
except database.Error as e:
print(f"Error adding entry to database: {e}")
try
およびexcept
ブロックを使用して、プログラム実行の通常のフローを妨害する例外(イベントまたはエラー)をキャッチして処理します。
try
ブロックで、statement
をINSERT
SQLステートメントを保持する変数として宣言します。 このステートメントは、MariaDBにfirst_name
列とlast_name
列に追加するように指示します。
コード構文は、SQLインジェクションの可能性を減らすパラメーターとしてデータを受け入れます。 パラメータを使用したプリペアドステートメントにより、指定されたパラメータのみが意図したとおりにデータベースに安全に渡されます。 通常、パラメータは注入できません。
次に、data
をタプルとして宣言し、add_data
関数から受け取った引数を使用します。 SQLステートメントとデータを渡して、cursor
オブジェクトでexecute()
メソッドを実行します。 execute()
メソッドを呼び出した後、接続でcommit()
メソッドを呼び出して、挿入されたデータを永続的に保存します。
最後に、これが成功した場合は、成功メッセージを出力します。
例外がある場合にのみ実行されるexcept
ブロックで、database.Error
をe
として宣言します。 この変数は、例外のタイプまたはスクリプトが中断したときに発生したイベントに関する情報を保持します。 次に、e
でフォーマットされたエラーメッセージを出力し、f-stringを使用してブロックを終了します。
データベースにデータを追加したら、次にデータを取得します。 次のステップでは、データを取得するプロセスについて説明します。
ステップ4—データの取得
このステップでは、Pythonコード内にSQLクエリを記述して、データベースからデータを取得します。
データベースカーソルで同じexecute()
メソッドを使用して、データベースエントリを取得できます。
関数get_data()
を定義して、従業員の名前を引数として受け入れます。この関数は、[X118X]