Pythonのpsycopg2を用いてElephantSQLのインスタンスにテーブルを作成してみます。
今回は、psycopg2モジュールを使用します。psycopg2はPythonの標準ライブラリ、モジュールではありませんので、事前にインストールする必要があります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■ElephantSQLのインスタンスのサーバー情報を取得する
まず、ElephantSQLのインスタンスのサーバー情報を取得しますので、ElephantSQL(https://customer.elephantsql.com/login)のログインページにアクセスし、アクセス後新しいインスタンスを作成します。
作成後、ElephantSQLの「instance」ページから作成したインスタンスの「Name」をクリックします。今回は事前に「test_db」というインスタンスを作成しています。
クリックすると、作成したインスタンスの「Details(詳細)」が表示されます。この「Details(詳細)」内の「URL」の情報をコピーします。ElephantSQLのインスタンスのサーバー情報の取得は完了となります。
■psycopg2を用いてElephantSQLのインスタンスにテーブルを作成する
取得後、psycopg2を用いてElephantSQLのインスタンスにテーブルを作成するスクリプトを書いていきます。
■コード
import psycopg2 conn = psycopg2.connect('postgres://****@*****.db.elephantsql.com/dsppyfom(取得したURL)') with conn.cursor() as cur: sql = ''' CREATE TABLE test01( ID int, Name varchar(255), Address varchar(255) ); ''' cur.execute(sql) conn.commit() conn.close()
今回はimportを用いてpsycopg2モジュールを呼び出します。その後、connという変数を定義し、その中でpsycopg2.connect()を用います。括弧内に引数,パラメータとして、取得したURLを貼り付けます。これで、サーバーへの接続を確立し、データベースセッションで、新しいオブジェクトを返します。なお、データベースセッションは、1つまたは複数のトランザクションで構成されている。トランザクションは、一連の情報交換と関連する作業、今回の場合はデータベースの更新などである。
その後、conn.cursor()を用いて、データベースセッションから新しいカーソル オブジェクトを返します。返されたカーソルオブジェクトは、with構文を用いて、cur変数とします。次にsqlという変数を定義し、その中でCREATE TABLE文を用いて、test01というテーブルを作成する命令文(クエリ)を記述します。作成するテーブル内のカラム(列)として、「ID」,「Name」,「Address」という3つのカラム(列)を作ります。またそれぞれのカラム(例)にデータを挿入する際の条件もそれぞれ指定します。
記述後、cur.execute()を用いて、SQLステートメント(SQLを使ったデータベースへの命令)を実行します。括弧内には、引数,パラメータとしてsql変数を渡します。ここまででwith構文を用いていますので、SQLステートメントを実行した後に、自動的に閉じる処理が実行されます。
その後、conn.commit()を用いて、保留中のトランザクションをデータベースにコミットさせます(確定させます)。今回の保留中になっているトランザクションは、cur.execute()を用いたSQLステートメント(SQLを使ったデータベースへの命令)の実行処理となります。
コミット(確定)させたことで、データベース内にテーブルが作成されます。最後にconn.close()を用いてサーバーへの接続を閉じます。
■実行・検証
このスクリプトを「e_db_test.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、今回のスクリプトではprint()を用いてテーブルの作成完了といった文字列の出力は記述していないので、何も出力されません。
何も出力されませんが、ElephantSQLの「instance」ページから作成したインスタンスの「Name」をクリックし、左側メニューから「BROWSER」をクリックすると、「”public”.”test01″」というテーブルが確認できました。
コメント