著者は、 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シェルに入ると、ターミナルプロンプトが変わります。 このチュートリアルでは、Pythonを記述して、次の名前のサンプル従業員データベースに接続します。 workplace とという名前のテーブル employees.
を作成することから始めます workplace データベース:
- CREATE DATABASE workplace;
次に、MariaDBに使用するように指示します workplace 現在のデータベースとして:
- USE workplace;
次の出力が表示されます。これは、これ以降に実行するすべてのクエリが有効になることを意味します。 workplace データベース:
OutputDatabase changed
次に、を作成します employees テーブル:
- CREATE TABLE employees (first_name CHAR(35), last_name CHAR(35));
テーブルスキーマでは、パラメータ first_name と last_name 文字列として指定されます(CHAR)最大長は 35.
これに続いて、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
開いたファイルで、osモジュールと mysql.connector モジュールを使用して import キーワード:
import os
import mysql.connector as database
The as ここでのキーワードは mysql.connector として参照されます database コードの残りの部分で。
次に、Python変数としてエクスポートした認証クレデンシャルを初期化します。
. . .
username = os.environ.get("username")
password = os.environ.get("password")
フォローアップし、を使用してデータベース接続を確立します connect() によって提供される方法 database. このメソッドは、クライアントの資格情報を指定する一連の名前付き引数を取ります。
. . .
connection = database.connect(
user=username,
password=password,
host=localhost,
database="workplace")
名前の付いた変数を宣言します connection への呼び出しを保持します database.connect() 方法。 メソッド内で、値をに割り当てます 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 関数。 実行に進みます execute() あなたの方法 cursor SQLステートメントとデータを渡すことによってオブジェクト。 呼び出した後 execute() メソッド、あなたは commit() 挿入されたデータを永続的に保存するための接続のメソッド。
最後に、これが成功した場合は、成功メッセージを出力します。
の中に except 例外がある場合にのみ実行されるブロック、宣言します database.Error なので e. この変数は、例外のタイプまたはスクリプトが中断したときに発生したイベントに関する情報を保持します。 次に、でフォーマットされたエラーメッセージの印刷に進みます。 e f-stringを使用してブロックを終了します。
データベースにデータを追加したら、次にデータを取得します。 次のステップでは、データを取得するプロセスについて説明します。
ステップ4—データの取得
このステップでは、Pythonコード内にSQLクエリを記述して、データベースからデータを取得します。
同じを使用して execute() データベースカーソルのメソッドを使用すると、データベースエントリを取得できます。
関数を定義する get_data() 従業員の名前を引数として受け入れるために、 execute() との方法 SELECT 正確な行を見つけるためのSQLクエリ:
. . .
def get_data(last_name):
try:
statement = "SELECT first_name, last_name FROM employees WHERE last_name=%s"
data = (last_name,)
cursor.execute(statement, data)
for (first_name, last_name) in cursor:
print(f"Successfully retrieved {first_name}, {last_name}")
except database.Error as e:
print(f"Error retrieving entry from database: {e}")
下 try ブロック、あなたは宣言します statement あなたを保持する変数として SELECT SQLステートメント。 ステートメントは、MariaDBに列を取得するように指示します first_name と last_name から employees 特定の姓が一致した場合のテーブル。
ここでも、パラメーターを使用してSQLインジェクションの可能性を減らします。
最後の関数に微笑んで、あなたは宣言します data タプルとして last_name その後にコンマが続きます。 実行に進みます execute() 上のメソッド cursor SQLステートメントとデータを渡すことによってオブジェクト。 for loop を使用して、カーソルに返された要素を繰り返し処理し、一致するものがあれば出力します。
の中に except 例外がある場合にのみ実行されるブロックは、宣言します database.Error なので e. この変数は、発生する例外のタイプに関する情報を保持します。 次に、でフォーマットされたエラーメッセージの印刷に進みます。 e ブロックを終了します。
最後のステップでは、定義された関数を呼び出してスクリプトを実行します。
ステップ5—スクリプトを実行する
このステップでは、スクリプトを実行可能にしてターミナルから実行するための最後のコードを記述します。
呼び出してスクリプトを完成させます add_data() と get_data() サンプルデータ(文字列)を使用して、コードが期待どおりに機能していることを確認します。
複数のエントリを追加したい場合は、 add_data() 選択したサンプル名をさらに追加します。
データベースでの作業が終了したら、リソースを浪費しないように接続を必ず閉じてください。 connection.close():
import os
import mysql.connector as database
username = os.environ.get("username")
password = os.environ.get("password")
connection = database.connect(
user=username,
password=password,
host=localhost,
database="workplace")
cursor = connection.cursor()
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)
cursor.commit()
print("Successfully added entry to database")
except database.Error as e:
print(f"Error adding entry to database: {e}")
def get_data(last_name):
try:
statement = "SELECT first_name, last_name FROM employees WHERE last_name=%s"
data = (last_name,)
cursor.execute(statement, data)
for (first_name, last_name) in cursor:
print(f"Successfully retrieved {first_name}, {last_name}")
except database.Error as e:
print(f"Error retrieving entry from database: {e}")
add_data("Kofi", "Doe")
get_data("Doe")
connection.close()
エラーを回避するために、コードが正しくインデントされていることを確認してください。
同じディレクトリに、 database.py ファイル、次のコマンドを使用してスクリプトを実行します。
- python3 ./database.py
次の出力が表示されます。
OutputSuccessfully added entry to database
Successfully retrieved Kofi, Doe
最後に、MariaDBに戻って、エントリが正常に追加されたことを確認します。
ターミナルからMariaDBプロンプトを開きます。
- sudo mysql
次に、MariaDBに切り替えて使用するように指示します workplace データベース:
- USE workplace;
成功メッセージを受け取った後 Database changed、内のすべてのエントリのクエリに進みます employees テーブル:
- SELECT * FROM employees;
出力は次のようになります。
Output+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Kofi | Doe |
+------------+-----------+
1 row in set (0.00 sec)
すべてをまとめると、MariaDBデータベースから情報を保存および取得するスクリプトを作成しました。
必要なライブラリをインポートすることから始めました。 使いました mysql-connector データベースに接続し、 os 環境から許可クレデンシャルを取得します。 データベース接続で、クエリを実行するためのカーソルを取得し、コードを次のように構造化しました add_data と get_data 機能。 関数を使用して、データベースにデータを挿入し、データベースからデータを取得しました。
削除を実装する場合は、必要な宣言、ステートメント、および呼び出しを使用して同様の関数を作成できます。
結論
Ubuntu 18.04でPythonスクリプトを使用して、MariaDBへのデータベース接続を正常にセットアップしました。 ここから、データベースにデータを保存する必要があるPythonプロジェクトのいずれかで同様のコードを使用できます。 このガイドは、MySQLから開発された他のリレーショナルデータベースにも役立つ場合があります。
Pythonを使用してプロジェクトを実行する方法の詳細については、Pythonに関する他のコミュニティチュートリアルを確認してください。