【SQLAlchemy】今更ながらSQLAlchemyを使ってデータベースを操作してみる

  • 2023年4月30日
  • 2023年4月30日
  • python

こんにちは。野中やすおです。

今回は、前回に引き続きSQLAlchemyでデータベースを操作をしてみます。 前回の「今更ながらPythonを使ってsqliteでデータベースを操作してみる」の記事は以下をご覧ください。

関連記事

こんにちは。野中やすおです。 最近ようやく選挙が終わったのですが、ブランクがだいぶ空き、さっぱりコーディングを忘れてしまっているのでリハビリがてらPythonを使って、sqliteでデータベースを操作をしてみます。 […]

今回の記事では、まずはCREATE、INSERT、UPDATE、DELETE、SELECTを順にメモしてます。

また今回は、customersテーブルに加えて、itemテーブル、purchases_detailsテーブルも追加してみました。

CREATE TABLE

補足すると、create_engineで接続するデータベース用エンジンを作成しています。

この例では接続するデータベースは、test.dbで、create_engineのオプションでecho=Trueをつけると発行されるSQLがログで出力されるようになります。 

create_allで定義したテーブルを一括して作成することができます。

INSERT TABLE

上記の例では、customersテーブルに値をInsertしています。Insertを行う方法は2つあって1つ目は、

とする方法。

もう一つは、

とする方法です。

また作成したテーブルをデータフレームで読み込んでいます。print(df)の結果として、ログ上では、以下のように表示されます。

そして今回エラーハンドリングとしてtry~catch文の中でqueryを実行しています。sqlchemy.exc.IntegrityErrorは、

  • プライマリキー制約違反
  • 外部キー制約違反
  • ユニーク(一意)制約違反
  • Not null制約違反

の時に発生するエラーですので、実務ではもう少し細かくエラーハンドリングをするべきだと思います。公式HPもぜひ参考してみてください。

その他、itemテーブル、purchases_detailsテーブルにも同様に値を入れます。

UPDATE TABLE

customers.c.customer_idのcはcolumnの省略を意味していて、customersテーブルの中のカラムの中のcustomer_idを表しています。

updateでは、顧客Bのcustomer_unit_priceを2000⇨3000に修正してみました。こちらも作成したテーブルをデータフレームで読み込んでいます。print(df)の結果として、ログ上では、以下のように表示されます。

DELETE

上記でコードを実行するとcustomersテーブルの中のcustomer_idが2となっている行を削除します。

こちらも作成したテーブルをデータフレームで読み込んでいます。print(df)の結果として、ログ上では、以下のように表示されます。

SELECT

selectでは、例とごとくcustomersテーブルを選択しています。

今回の記事では、SQLAlchemyでデータベースを操作方法をメモしてみました。

fetchallは、データベースで実行したSQLの結果全てを配列として返すメソッドで、print(result.fetchall())で以下のように出力します。

別の記事では、より実践的なSQLAlchemyでデータベースを操作方法を書いていこうと思います。