24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

python3でDBにデータを保存する(with PostgreSQL and psycopg2)

Last updated at Posted at 2018-09-29

この記事について

 前回の記事にてpsycopg2をインストールしました。
 なので今回はそれを利用してDBにデータを保存してみようと思います。
 圧倒的初心者記事ですがご容赦ください。

関連記事

ANACONDA NAVIGATORを使って仮想環境を作ってpsycopg2を入れる

環境

 Python3
 Anaconda

ソースコード

使用準備

postgres.py
import psycopg2

まずはインストールしたpsycopg2をインポートします。
これで使用準備はOK。

接続用ステータス設定

postgres.py
path = "localhost"
port = "5432"
dbname = "test"
user = "postgres"
password = "password"

次に接続用のステータスを設定していきます。
今回はローカル(自分のPC)上に環境を用意していますのでPATHはlocalhost。
もしネットワーク上の別PCだったりクラウド上に存在するDBの場合にはそのpathに書き換えます。
portはpostgreSQLだと5432がデフォルトです。

dbnameで迷ってしまうかもしれませんが下の画像の赤枠で囲まれた箇所の名前です。
image.png
userとpasswordについてはPostgreSQLをインストールした際に自身で設定したものを入力してください。
これで接続先の設定は終了です。

接続部分

postgres.py
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={}"
の{}の置き換えを前から順番に行っています。
文字列の途中に変数を入れる際の方法の一つです。

postgres.py
connection = psycopg2.connect(conText)
cur = connection.cursor()

実際に繋いでみます。
psycopg2.connect(conText)の部分で実際に繋いでみるのですが、もし入力が間違っていた場合以下のエラー文が出力されます。

exception.txt
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を実際に実行してみましょう。
まずテストのためにテーブルを用意します。

Test.sql
CREATE TABLE TEST(
    id SERIAL,
    name text,
    nedan numeric(15,4)
);

SERIALは自動付番です。

DBにデータを保存

それでは今回の本題。
DBにデータを保存してみようと思います。

postgres.py
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のコード内に組み込んで実行してみます。

postgres.py
sql = "SELECT * FROM TEST"
cur.execute(sql)

以上によりSELECT文が実行され、その結果がcurの中に保存されました。
試しに取り出してそれを出力してみます。

postgres.py
print(cur)
test_sql.txt
<cursor object at 0x0000016267A4E208; closed: 0>

実はこれを実行してもだめなんです。
よくわからない文字列が出力されるだけです。
for文を使用して1行ずつ取り出して表示していきます。

postgres.py
for row in cur:
    print(row)

image.png
はい、今度はちゃんとデータが保存できていることを確認できましたね!
これにて今回の記事を終了とさせていただきます。
ありがとうございました。

24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?