Edited at

初心者がPythonを使ってPostgreSQL に接続する


Postgresに接続してSQLでDBいじってみたい

と思ったPython超初心者向け。

今日Python、postgresを初めて触った、そんな私がpostgresDBにpythonで接続するまでのメモ。


まず環境を整えなければ

新しい言語を触るとなったら、まず必要なのはPythonとIDEなどの環境、postgresに繋ぐためのライブラリ。

とりあえず以下を入れました。

Pycharm

Python3.0

postgres-x64-10

そしてPostgresとの接続に必要らしい、anaconda3、psycong2。

インストールはこちらを参考にさせて頂きました。

http://prunus1350.hatenablog.com/entry/2016/01/09/135110


インストールが終わったら

一通りインストールが終わったら、とりあえずpgadmin4を開いてみた。

https://dev.to/programmingmonky/postgresqlsql-3dja

上記を参考にしながら新しいスキーマ、テーブルを作成。

SQLによって自分の作成したテーブルにレコードが追加されていることを確認します。

image.png

できた。名前が適当すぎるがpgadmin4でSQLでレコードが取れる状態になりました。

で、このレコードをPythonで取れるようにしたいので次はpython。


ソースの作成

セットアップが終わったので、

とりあえずPycharmでソースを書いてみた。


pythonTest.py

import psycopg2

# connect postgreSQL
users = 'postgres' # initial user
dbnames = 'テーブル名'
passwords = 'パスワード'
conn = psycopg2.connect(" user=" + users +" dbname=" + dbnames +" password=" + passwords)

# excexute sql
cur = conn.cursor()
cur.execute('SELECT * FROM table1;')
results = cur.fetchall()

#output result
print(results)

cur.close()
conn.close()


こんな感じ。

ローカルでつなぐ場合には、host、portは必要ありません。

また、握ったConnectionはキチンと開放します

これをコンソールから実行します。


console

C:\pythonDirectry> python phthonTest.py

[('1', 'テスト1', 'テスト2', 'テスト3')]

とれました。

めでたし。


そう簡単にいかなかったんだってばよ


console

C:\pythonDirectry>python pythonTest.py

Traceback (most recent call last):
File "pythonTest.py", line 1, in <module>
import psycopg2
File "C:\pythonDirectry\psycopg2\__init__.py", line 50, in <module>
from psycopg2._psycopg import ( # noqa
ModuleNotFoundError: No module named 'psycopg2._psycopg'

最初にセットアップしたときに怒られたもの。

AWSに上がっているプロジェクトを面倒くさがって流用してしようしていたところ、怒られてしまった。

AWSで使うにはLinux用のpycong2が必要ですが、

Windows上で開発するときはWindowsx64など、対応するパッケージを参照しているかを確認してから作業しましょう。

参考にさせて頂いた質問

https://github.com/jkehler/awslambda-psycopg2/issues/23


そう簡単にいかなかったんだってばよ2


console

C:\pythonDirectry> python pythonTest.py

Traceback (most recent call last):
File "pythonTest.py", line 10, in <module>
+ '***')
File "C:\Users\***\AppData\Local\Continuum\anaconda3\lib\site-packages\psycopg2\__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?

エラーでた。。。つながらないよ!といわれている。

PORTの空き状態とかいろいろ見てみたが、とりあえずpostgres再起動したら解消した。

しかし、よく見たらpostgresが死んでいたらしい。pgadmin4上で死んでるよ!と言われていたのに後で気づいた。

なんてこった。