この記事について
前回の記事にてpsycopg2をインストールしました。
なので今回はそれを利用してDBにデータを保存してみようと思います。
圧倒的初心者記事ですがご容赦ください。
関連記事
ANACONDA NAVIGATORを使って仮想環境を作ってpsycopg2を入れる
環境
Python3
Anaconda
ソースコード
使用準備
import psycopg2
まずはインストールしたpsycopg2をインポートします。
これで使用準備はOK。
接続用ステータス設定
path = "localhost"
port = "5432"
dbname = "test"
user = "postgres"
password = "password"
次に接続用のステータスを設定していきます。
今回はローカル(自分のPC)上に環境を用意していますのでPATHはlocalhost。
もしネットワーク上の別PCだったりクラウド上に存在するDBの場合にはそのpathに書き換えます。
portはpostgreSQLだと5432がデフォルトです。
dbnameで迷ってしまうかもしれませんが下の画像の赤枠で囲まれた箇所の名前です。
userとpasswordについてはPostgreSQLをインストールした際に自身で設定したものを入力してください。
これで接続先の設定は終了です。
接続部分
conText = "host={} port={} dbname={} user={} password={}"
conText = conText.format(path,port,dbname,user,password)
次に先ほど設定した値を使用して実際に接続を行います。
conText.format(path,port,dbname,user,password)の部分はその上の"host={} port={} dbname={} user={} password={}"
の{}の置き換えを前から順番に行っています。
文字列の途中に変数を入れる際の方法の一つです。
connection = psycopg2.connect(conText)
cur = connection.cursor()
実際に繋いでみます。
psycopg2.connect(conText)の部分で実際に繋いでみるのですが、もし入力が間違っていた場合以下のエラー文が出力されます。
Traceback (most recent call last):
File ".\test.py", line 12, in <module>
connection = psycopg2.connect(conText)
File "E:\anaconda\lib\site-packages\psycopg2\__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError
curは実行するためのエリアです。
例えばSLECT文などでデータを取得してきた場合にはここにデータが収録されます。
テスト用のテーブル準備
次にSQLを実際に実行してみましょう。
まずテストのためにテーブルを用意します。
CREATE TABLE TEST(
id SERIAL,
name text,
nedan numeric(15,4)
);
SERIALは自動付番です。
DBにデータを保存
それでは今回の本題。
DBにデータを保存してみようと思います。
sql = "insert into test(name,nedan) values('リンゴ',100);"
cur.execute(sql)
connection.commit()
今回はsql変数を用意していますが、cur.execute(sql)の部分に直接入力しても大丈夫です。
cur.execute(sql)で実行しているのですが、これでは保存されておらず、その次の文章のconnection.commit()でDBにコミットされます。
これはPostgreSQLの設定でAuto CommitがデフォルトでOFFになっているためです。autocommitをTrueにすればこの文章は不要になります。
DBに保存されたデータを確認
SQLを実行したことで下の図のようにデータが保存できているはずです。
ですのでここではちゃんと保存できていることを確認してみましょう。
id | name | nedan |
---|---|---|
1 | リンゴ | 100 |
次にこのテーブルを取得してくるSQLをPythonのコード内に組み込んで実行してみます。
sql = "SELECT * FROM TEST"
cur.execute(sql)
以上によりSELECT文が実行され、その結果がcurの中に保存されました。
試しに取り出してそれを出力してみます。
print(cur)
<cursor object at 0x0000016267A4E208; closed: 0>
実はこれを実行してもだめなんです。
よくわからない文字列が出力されるだけです。
for文を使用して1行ずつ取り出して表示していきます。
for row in cur:
print(row)
はい、今度はちゃんとデータが保存できていることを確認できましたね!
これにて今回の記事を終了とさせていただきます。
ありがとうございました。