※当サイトの記事には、広告・プロモーションが含まれます。

Python標準のAPIとしては、JDBC APIのようなものは用意されていないらしい

nazology.net

スコットランド海洋科学協会(SAMS)で行われた研究により、光が届かず光合成が不可能な深海では、鉱石が電気分解により海水から酸素を生成している可能性が示されました。

光合成できない深海に酸素の供給源を発見、酸素の起源に一石か - ナゾロジー

⇧ 鉱石の電気分解だと、光合成に比べて酸素を生成できる期間が短いような気はしますけどね、持続可能というわけにはいかなさそうね...

JDBC APIとは

Oracleの公式のドキュメントでは、

docs.oracle.com

JDBC (Java Database Connectivity) APIは、Javaプログラミング言語からの汎用的なデータ・アクセスを提供します。JDBC APIを使用して、リレーショナル・データベース、スプレッドシート、フラット・ファイルなど、実質上あらゆるデータ・ソースにアクセスすることができます。JDBCテクノロジは、ツールと代替インタフェースを構築できる共通のベースも提供しています。

https://docs.oracle.com/javase/jp/8/docs/technotes/guides/jdbc/index.html

⇧ とあるように、異なる「RDBMS(Relational DataBase Management System)」であろうとも、共通の操作で済ませることができると。

イメージとしては、

stackoverflow.com

⇧ 上図のように、利用するデータベースが異なっていたとしても、アプリケーション側では、データベースの差異に関係なくコーディングできると。

「データベース接続情報」は異なるのだけど、外部ファイルなどから取得するようにしておけば、アプリケーション側でのコーディング内容は、データベースが変わったとしても変える必要は無いと。

つまり、データベース毎にコーディングを変更しないで良いと。

JDBC API」は、Javaの標準APIとして用意されている、データベースとやり取りするためのAPIであると。

Pythonにおけるデータベースとのやり取りするAPIについての仕様は「PEP 249 – Python Database API Specification v2.0」

で、本題。

Pythonにおけるデータベースとのやり取りのAPIはどうなのか?

そもそも、Pythonでデータベースとやり取りするためのAPIについての仕様は、

  • PEP 249 – Python Database API Specification v2.0

という仕様で定義されていると。

で、

qiita.com

⇧「RDBMS(Relational DataBase Management System)」毎に、微妙に実装方法が異なるという地獄の様相を呈していますと...

つまり、利用するデータベースが異なる毎に、それぞれのコーディングが必要になってしまうと...

そもそも、

qiita.com

⇧ 上記サイト様のコメントにもあるように、PostgreSQLで「psycopg2」を利用する場合「Prepared statement」が用意されていないらしい...

「PEP 249」でも「Prepared statement」って言葉が出て来ないので、各ライブラリで対応していないと「Prepared statement」機能はりようできないと...

ちなみに、「Prepared statement」について、Wikipediaの説明はというと、

In database management systems (DBMS), a prepared statementparameterized statement, or parameterized query is a feature where the database pre-compiles SQL code and stores the results, separating it from data. Benefits of prepared statements are:

  • efficiency, because they can be used repeatedly without re-compiling
  • security, by reducing or eliminating SQL injection attacks

https://en.wikipedia.org/wiki/Prepared_statement

⇧ とあり、「SQLインジェクション」という脆弱性に対する防御手段ともなるとあるので、「Prepared statement」機能は利用できないとマズイ気がするんだが...

そう考えると、Javaの標準ライブラリで用意されているJDBCJava DataBase Connectivity) APIは、必要な機能を用意してくれていて親切ということですかね。

まぁ、上記サイト様にありますように、「SQLAlchemy」という「ORM(Object Relational Mapping)」を利用するのが良さそうな気がしますね。

う~む、Pythonはデータベース系のアプリケーション向きであって、Webアプリケーション向きでは無いんかね...

まぁ、機械学習などの科学計算系のライブラリが充実してるぐらいしかPythonを使うメリットが思いつかんのよね...

Webアプリケーションでも、「サーバレス」のようなものであれば、Pythonを利用するメリットはあるのかもしれないけど...

Pythonを学習するモチベーションが上がらないんよね...

毎度モヤモヤ感が半端ない…

今回はこのへんで。