質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Python 2.7

    1468questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Windows10のPythonからPostgreSQLに接続する

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,792

kasaburanka

score 141

使用しているOS: Windows 10  
使用しているPCのメーカー/NECLL550/k 
関係するアプリケーション名/Python2.7.11 
関係する機器の機種名/型番:postgresql-9.6.0-beta1-windows-x64.exe 
エラーメッセージなど(原文のまま):psycopg2-2.6.1.win32-py2.7-pg9.4.4-release.exeからダウンロードインストールをいたしました。

この状況の中Pythonからpsycopg2をインポートしようとするとエラーになります。別の形で質問しましたがタイトルを変えて質問したほうが良いとのことでしたので改めて質問させていただきます。
postgresql-9.6はPATHも通しましてpostgresql listen_addresses='*'('localhost') log_desination='stderr'('stderr,csvlog,eventlog') log_line_prefix='%t'('%t') client_encoding=sql_ascil(sjis) pg_hba.confのパスワード認証は認証なしに設定しました。

postgresql-9.6はPATHはc:¥program Files¥PostgreSQL¥9.6¥binとなっています。
どこに問題があるのでしょうか?

test105.pyで保存したコードは
import psycopg2

if name == "main":

connector = psycopg2.connect(host="localhost",database="pdb",user="pgusr",password="pgpsw") 
cursor = connector.cursor()

sql = "insert into test_table values('1','python')" 
cursor.execute(sql) 
sql = "insert into test_table values('2','パイソン')" 
cursor.execute(sql) 
sql = "insert into test_table values('3','ぱいそん')" 
cursor.execute(sql)

connector.commit()

cursor.close() 
connector.close()

エラーメッセージは
Traceback (most recent call last): 
File "test105.py", line 7, in <module> 
connector = psycopg2.connect(host="localhost",database="pdb",user="pgusr",password="pgpsw") 
File "C:\Python27\lib\site-packages\psycopg2\init.py", line 164, in connect 
conn = _connect(dsn, connection_factory=connection_factory, async=async) 
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? 

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • toshi_yama

    2016/06/07 11:30

    文章が重複しております。修正してください。

    キャンセル

  • tkanda

    2016/06/07 12:07

    肝心のエラーメッセージが記載されていないようですが。

    キャンセル

回答 1

checkベストアンサー

0

チェックポイントは2点あります。

  1. PostgreSQLが正常に起動されていることを確認する。
    コマンドプロンプトで "netstat -anp tcp" を実行し、ローカルアドレスが "0.0.0.0:5432" で状態が "LISTENING" になっているソケットがあることを確認する。これが存在していない場合、PostgreSQLが起動されていないと考えられます。
  2. PostgreSQL の接続受け入れインターフェースを確認する。
    postgresql.conf ファイルの listen_addresses の記述がどのようになっているか確認しましょう。
    listen_addresses=の後ろには、クライアントアプリケーションからの接続要求の受け入れを許可するネットワークインターフェースのIPアドレスが記載されています。(複数エントリーはカンマ区切り)
    基本的にはここに 127.0.0.1(IPv4のローカルホストアドレス) と ::1(IPv6のローカルホストアドレス) が含まれている必要があります。
    同じPC上で動作するPythonアプリケーションからの接続だけを許可し、他のPCからの接続を禁止する場合、listen_addresses=::1,127.0.0.1 とに定義します。
    なお、すべてのネットワークインターフェースに対して接続受け入れを許可する場合、 listen_addresses=* と定義することができます。

ご参考になれば。

(追記)検証手順 #1 - PostgreSql の動作確認

  1. psql にユーザー'postgres'でログインする(Databaseは既定の 'postgres' にする)
  2. \l でデータベース名の一覧を得る。ここに 'pdb' というデータベースが存在している場合、4へ進む。
  3. 上記で 'pdb' が存在していない場合、 create database pdb; を実行。("CREATE DATABASE"と表示されれば成功)
  4. \connect pdb; を実行し、現在のデータベースを pdb に変更。(プロンプトが "pdb=#" になる)
  5. テスト用のテーブルを作成。CREATE TABLE test (id serial PRIMARY KEY, age integer, name varchar); ("CREATE TABLE"と表示されればOK)
  6. \d test; を実行し、テーブルが正しく作成されたことを確認。(id, age, nameなどの列名と定義が表示されればOK)
  7. insert into test (age, name) values (20, 'Taro'); で一行追加。
  8. select * from test; でデータを取得。(上記で追加した内容が表示されればOK)

上記が問題ない場合、PostgreSqlのインストールと設定は正常だと思います。

(追記)検証手順 #2 - Python+Psycopg2 の動作確認

  1. Python(Command line)を起動し、Pythonプロンプトに対して以下を実行する。
  2. >>> import psycopg2
  3. >>> db=psycopg2.connect(database="pdb", host="localhost", user="postgres", password="postgresのパスワード")
  4. >>> cursor=db.cursor()
  5. >>> cursor.execute("select * from test;") (この行が抜けてました!)
  6. >>> cursor.fetchone() (ここで検証手順 #1 で追加したデータが表示されればOK)
  7. >>> cursor.close()
  8. >>> db.close()

恐らく上記のどこかで失敗するのではないかと思います。
もし、これらの手順がすべて成功する場合、現在のスクリプトファイルの内容が、(転記ミスなどにより)質問欄に書かれている内容と違っている可能性が高いと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/07 13:49

    tkandaさま
    上記2点確認しました。
    test105.pyを実行するとまだエラーが出ます。
    Traceback (most recent call last):
    File "test105.py", line 7, in <module>
    connector = psycopg2.connect(host="localhost",database="pdb",user="psycopg",password="pgpsw")
    File "C:\Python27\lib\site-packages\psycopg2\__init__.py", line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
    psycopg2.OperationalError: FATAL: password authentication failed for user "psycopg"
    test105.pyのline 7とpsycopg2\__init__.py", line 164の内容が一致しないということですか?
    よろしくご指導ください

    キャンセル

  • 2016/06/07 14:21

    connector = psycopg2.connect(host="localhost",database="pdb",user="psycopg",password="pgpsw")部分とpsycopg2\__init__.py", line 164,を同じに設定しました
    NameError: global name 'pdb' is not definedとなりまして"pdb"が定義されていないと出ます。この意味がよくわかりません

    キャンセル

  • 2016/06/10 12:14

    ありがとうございました。質問をすることですぐ解決できると思っていました。反省しています。Postgreを理解せず質問しても駄目だと気が付きました。再度基本をしっかり見つめなおし出直します。ありがとうございました

    キャンセル

  • 2016/06/10 13:42 編集

    RyokoMoriuchi さん、コメントがあったことに気づかず失礼しました。

    2016/06/07 13:49 のコメントにあるエラーは、psycopg というユーザーのパスワード認証が失敗したという意味です。(ユーザー名、パスワードが間違えている可能性が高い)

    psycopg2 の __init__.py の line 164 と同じにしろという意味ではないので、もしそのように修正してしまったのなら、もとの状態に戻したほうがいいです。

    それと、このスレッドのもともとのエラー(最初の質問に含まれていたエラー)とは、別の問題に話題が移っていますので、もしユーザー名とパスワードの件が自力で解決できなければ、「PostgreSql パスワード認証が失敗します」のようなタイトルで、別の質問を投稿することをお勧めします。

    キャンセル

  • 2016/06/14 10:40

    お世話になります
    いろいろ質問が変わってきていてすみません。Pdbを作成しました。
    しかしながら相変わらず下記のエラーが出ます
    c:\python>python test105.py
    Traceback (most recent call last):
    File "test105.py", line 7, in <module>
    connector = psycopg2.connect(host="localhost",database="pdb",user="pguser",password="pgpsw")
    File "c:\python\psycopg2\__init__.py", line 140, in connect
    items.append(('database', pdb))
    NameError: global name 'pdb' is not defined
    この意味が良く理解できていません
    __init__.pyは元に戻しpgAdmin IIIでデータベースは作成いたしました。今PostgreSQLも勉強し始めましたが・・・・よろしくお願いいたします

    キャンセル

  • 2016/06/15 07:49

    私の最初の回答に書いた2つのポイントが問題ないのに接続に失敗するようですと、PostgreSQL本体のインストールがうまく行われていない可能性を疑う必要があります。

    一度、PostgreSQLをアンインストールして、改めて正しい手順でインストールしてみてはいかがでしょうか。現在お使いのOSによってインストール手順は違いがあります。例えば、Windowsでしたら下記のサイトに解りやすく書かれています。このサイトの手順を最初から最後まできちんと実行してみてはいかがでしょうか。

    PostgreSQLインストール (http://www.dbonline.jp/postgresinstall/)

    キャンセル

  • 2016/06/15 12:46

    ありがとうございます。再度インストールしなおしました。そしてpostgresql.conf,pg_hhba.confの設定をしました。netstat-anp tcpの確認及びサービスが開始されている確認しました。マイクロアカウントとは別にPostgresをinstallする前に別のアカウントとパスワードを設定しました。そこでお教えいただきたいことがございます。
    connector = psycopg2.connect(host="localhost",dataname="muku",user="postgres",password="pgpsw")
    dataname="muku",user="postgres",password="pgpsw"この部分は(test105.pyより抜粋しました)Postgresをinstallする前に別のアカウントとパスワードを設定した分と同じでなければいけないのですね。それでもエラーが出ます
    c:\python>python test105.py
    Traceback (most recent call last):
    File "test105.py", line 7, in <module>
    connector = psycopg2.connect(host="localhost",dataname="muku",user="postgres",password="pgpsw")
    File "c:\python\psycopg2\__init__.py", line 142, in connect
    items.append(('user', pguser))
    NameError: global name 'pguser' is not defined
    なぜなのでしょうか?__init__.pyは触っていません。

    キャンセル

  • 2016/06/15 13:16

    postgresというユーザーは登録済みですか?確認のため、コマンドプロンプトで以下のコマンドを実行してみてください。

    > psql -u postgres -W

    -Wオプションは明示的なパスワード入力を強制する(パスワードを入力しないとログインできなくする)ためのものです。これでPSQLシェルにpostgres というアカウントでログインできるはずです。このログインができない場合、パスワードが間違っています。
    まずは、これでログインができることを確認しましょう。

    キャンセル

  • 2016/06/15 13:50

    誤解されているといけないので念のため申しますが、psqlにログインするユーザーアカウントは、Windowsにログインするアカウントとは関係ありません。PostgreSqlが管理しているユーザーアカウントとWindowsが管理しているユーザーアカウントは、お互いに無関係な二つの異なる世界の話です。

    キャンセル

  • 2016/06/15 14:00

    お世話になります。下記のように出力しました
    Server [localhost]: localhost
    Database [postgres]: pdb
    Port [5432]: 5432
    Username [postgres]:
    Client Encoding [SJIS]:
    psql (9.5.3)
    "help" でヘルプを表示します.

    pdb=# help
    PostgreSQL へのコマンドライン・インターフェース、psql へようこそ。
    \copyright とタイプすると、配布条件を表示します。
    \h とタイプすると、SQL コマンドのヘルプを表示します。
    \? とタイプすると、psql コマンドのヘルプを表示します。
    \g と打つかセミコロンで閉じると、問い合わせを実行します。
    \q で終了します。
    pdb=#
    どうしてもクリアしたいですのでよろしくお願いいたします。

    キャンセル

  • 2016/06/15 14:40

    お世話になります
    マイクロソフトのアカウントとは別にPostgresというアカウントを追加してパスワードを設定しました。マイクロソフトと同じアカウントにするとややこしくなるということでご紹介していただいたサイトを参考に別のアカウントを追加しました。それでpsqlで出力したのが上記です

    キャンセル

  • 2016/06/15 15:35

    それでは、問題がPostgreSqlの設定にあるのか、Python+psycopg2 にあるのかを整理するために、2つの検証をしましょう。(私の回答に手順を追記しますので、参照してください。)

    キャンセル

  • 2016/06/15 17:25

    お世話になります。検証はさせていただきたいと思います。ただその前に教えてください
    http://www.dbonline.jp/postgresinstall/このサイト通りでアカウントを作りました(Win7)そしたら2つのユーザーができました。マイクロソフトの方ではコマンドで psql -u postgres -Wを入力するとC:\Users\postgres>psql -u postgres -W
    'psql' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    このようになります。このアカウントのほうにすべてを同期させる必要がありますか?
    気になりましたので・・・・・

    キャンセル

  • 2016/06/15 21:30

    まず前提ですが、私が回答欄に追記した2つの検証を行う上で、postgres という名前のWindowsユーザーアカウントは不要です。PostgreSqlのインストーラーによる自動作成が行われても行われていなくても、また手動でユーザーアカウントを作成してあってもなくても、関係ありません。これらの検証は普段お使いのWindowsユーザーアカウントでそのまま実行できます。

    postgresというWindowsアカウントは、古いバージョンのPostgreSqlを動作させるために必要だったもので、バージョン9.1.xよりも古いインストーラーが自動で作成していたものです。今回はバージョン9.6ベータ版なのでpostgresというWindowsアカウントを作成する必要はありません。

    次に、コマンドプロンプトで psql が実行できない件について説明します。
    postgresというユーザーが不要であることはすでに説明しましたが、これ以外のユーザーでもpsqlが実行できない場合があり得ます。この場合、以下の手順で環境変数PATHを修正する必要があります。

    (1)コントロールパネル>システムとセキュリティ>システムを開き、左上の方にある「システムの詳細設定」を開く。

    (2)「詳細設定」タブの「環境変数」ボタンをクリック。

    (3)「システム環境変数」のリストで「変数」の'PATH'を選択して「編集」をクリック。

    (4)「変数値」の文字列の最後に ";C:\Program Files\PostgreSQL\9.6\bin" を追加して「OK」→「OK」→「OK」ですべてのダイアログを閉じる。

    (5) コマンドプロンプトが開いている場合、すべて閉じる。

    (6) 新たにコマンドプロンプトを開いて "psql -u postgres -W" を実行できることを確認する。




    キャンセル

  • 2016/06/15 21:43

    私が誘導したインストール手順が古いバージョンのものだったために混乱させてしまい、失礼いたしました。
    ネットを検索したところ、新しいバージョンのインストール手順で参考になるものが見つかりましたのでご紹介します。

    http://www.uptime.jp/ja/resources/techdocs/2015/02/installing_postgresql_9_4_on_windows/

    このページの一番下にある「ダウンロード:PostgreSQL/Apache/PHP for Windows インストールガイド(9.4対応版)」というリンクからダウンロードできるPDFが新しい情報をカバーしています。改めてご参考になさってください。

    キャンセル

  • 2016/06/16 09:20

    ありがとうございます。既にこれは試しました。この分に従ってインストールしました。そして初期設定はhttp://lets.postgresql.jp/documents/tutorial/windows/を参考にしました。私はWin10は7~8台、そしてWin8.1は3台Win7は2台、Mac1台あります。分解が好きでXPやVistaなどをUpグレードしたものが多くこのNECもVistaをWin10にした分です。主にWindowsを使っているためMacでは試していません。あくまでもWindowsにこだわっています。ただ気になったのはマイクロソフトのアカウントとPostgresのアカウントの使い分けがはっきりしないので前回別アカウントを作成したときにこちらにもすべてのアプリが必要なのか?と思った次第です。なのでTest105.pyに記述している中身と
    __init__.pyの中身
    items = []
    if database is not None:
    items.append(('database', pdb))
    if user is not None:
    items.append(('user', pguser))
    if password is not None:
    items.append(('password', pgpsw))
    if host is not None:
    items.append(('host', localhost))
    if port is not None:
    items.append(('port', 5432))
    この部分を同じにしなければいけないのかと思いました。昔PHP/MySQLを少しをかじったときに(XAMPP)にいろいろな設定をしたことがありました。PostgresはどちらかというとUnixやMac OS X(linux)で利用されているので。考え方は一緒なのでしょうが。それで今私はPostgreSQLは9.5.3をインストールしました。apache,PhpはきっちりLocalhostは認識できています。Pythonからpsycopg2に接続できないでいます。
    Pdbもhttp://www.hcn.zaq.ne.jp/cabnw708/pgAdmin.jpg作成済です。やはり9.5.3のドキュメンティーションを読んで理解すべきですか?

    キャンセル

  • 2016/06/16 12:26

    test105.py でエラーが出るかどうかはともかく、私が回答に追記した2つの検証手順は実行されましたか?結果はいかがでしたか?画像を見る限り、PostgreSQLのインストールはうまくいっているように見えますね。では、検証#2のPythonコンソールからのテストはいかがでしょうか?

    キャンセル

  • 2016/06/16 12:57

    お世話になります.検証#2では
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    psycopg2.ProgrammingError: no results to fetch
    上記になります

    キャンセル

  • 2016/06/16 13:22

    すみません。検証#1ですがpsqlをクリックすると最初にServer [localhost]:と表示されます。ログインの仕方がわかりません

    キャンセル

  • 2016/06/16 13:54

    検証は手順#1→手順#2の順に行ってください。

    #1のほうのログイン方法ですが、以下のようにしてください。

    (1) スタートボタン→すべてのプログラム→PostgreSQL 9.6→SQL Shell (psql)を実行

    (2) "Server[localhost]:", "Database[postgres]", "Port[5432]", "Username[postgres]", "Client Encoding [SJIS]" は、空白のままENTERを押し、ユーザーpostgresのパスワードを入力してENTER。("postgres=#"というプロンプトが出たら、コマンド等を入力開始)。

    キャンセル

  • 2016/06/16 15:10

    長い時間すみません。本当に何もわからないので申し訳ございませんがもう少しお助けください
    Server [localhost]:
    Database [postgres]:
    Port [5432]:
    Username [postgres]:
    Client Encoding [SJIS]:
    psql (9.5.3)
    "help" でヘルプを表示します.

    postgres=# username [postgres]
    postgres-# password [pgpsw]
    postgres-# \l
    データベース一覧
    名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権
    -----------+----------+------------------+----------+-------------------+-----------------------
    pdb | postgres | UTF8 | C | C |
    postgres | postgres | UTF8 | C | C |
    template0 | postgres | UTF8 | C | C | =c/postgres +
    | | | | | postgres=CTc/postgres
    template1 | postgres | UTF8 | C | C | =c/postgres +
    | | | | | postgres=CTc/postgres
    (4 行)


    postgres-# \connect pdb;
    データベース "pdb" にユーザ"postgres"として接続しました。
    pdb-# CREATE TABLE test (id serial PRIMARY KEY, age integer, name varchar);
    ERROR: syntax error at or near "username"
    行 1: username [postgres]
    ^
    pdb=#
    このようになります

    キャンセル

  • 2016/06/16 15:38

    usernameとpassword入力をしないでやってみます。しかし多分検証#2で下記のエラーが出ます
    psycopg2.ProgrammingError: no results to fetch

    キャンセル

  • 2016/06/16 18:12 編集

    "username [postgres]"と"password[pgpsw]"は不要です。この2行を無くして、ログインの最初からやり直してみてください。

    ちなみに、#1の手順をすべて完了できていない場合、#2の手順で "no results to fetch" というエラーが出るのは正しい動作です。

    キャンセル

  • 2016/06/16 23:05

    お世話になります。#1の手順は完了しました。#2の手順で "no results to fetch" というエラーが出るのは正しい動作です。→これは正しいのですね
    ですが、Pythonからtest105.pyを実行してもエラーになるのはなぜですか?もう近くまでできてる気がしていますが。もう少しですよね。よろしくお願いします。Win7でも検証しました。同じ状況です。がしかしコマンドプロンプトで問題が発生しています。これは明日再度確認します。

    キャンセル

  • 2016/06/17 06:47

    #2の手順で "no results to fetch" というエラーが出るのは、#1を完了できていない場合に限ります。

    もし#1の手順をすべて完了した場合、#2では#1の8と同じ抽出結果が表示されるはずです。#1も#2も、タイプミスなどが無いように、気を付けてください。

    ゴールが近い感じがしますね。頑張ってください。

    キャンセル

  • 2016/06/17 07:41

    今気づいたんですが、検証手順#2に重大なミスがありました。大変申し訳ありません!!!

    検証手順#2の5を追加しました。これが無いと "no results to fetch" エラーになりますね、何にも select してないのに fetchone() できるわけありませんね。ホント申し訳ない。

    キャンセル

  • 2016/06/17 10:08 編集

    お世話になります。全部クリアしました。がしかし、pythonからpsycopg2をimportしようとすると下記になります。なぜでしょうか?
    c:\python>python test105.py
    Traceback (most recent call last):
    File "test105.py", line 7, in <module>
    connector = psycopg2.connect(host="localhost",database="pdb",user="postgres",password="pgpsw",port=5432)
    File "c:\python\psycopg2\__init__.py", line 140, in connect
    items.append(('database', pdb))
    NameError: global name 'pdb' is not defined
    PythonコンソールからはクリアできるのにWindowsのコマンドプロンプトからはエラーが返るのはなぜなのでしょうか?
    本当に申し訳ございませんがもう少しの時間お助けください。よろしくお願いいたします

    キャンセル

  • 2016/06/17 11:00 編集

    そうですね、そうするとtest105.pyになにか構文エラー等があるのかもしれません。このtest105.pyは、最初の質問にあるソースコードと全く同じ内容ですか?改めて確認してください。

    それと、最初の質問文のソースコード部分をコードブロックで囲むように修正しましょう。そうしないと、インデントが正しく表示されません。コードブロックで囲む方法は、質問文の修正画面で、ソースコードをすべて選択した状態で </> というボタンをクリックします。

    キャンセル

  • 2016/06/17 11:45

    それから、基本的な確認ですが、pdbデータベースには test_table というテーブルを作成してあるのですよね?試しに psql で下記を実行した結果を教えていただけませんか?

    postgres=# \connect pdb;

    pdb=# \d test_table;

    キャンセル

  • 2016/06/17 13:21

    お世話になります。
    確認しました。
    Server [localhost]:
    Database [postgres]:
    Port [5432]:
    Username [postgres]:
    Client Encoding [SJIS]:
    psql (9.5.3)
    "help" でヘルプを表示します.

    postgres=# \connect pdb;
    データベース "pdb" にユーザ"postgres"として接続しました。
    pdb=# \d test_table;
    "test_table" という名前のリレーションが見つかりません。
    pdb=#
    Test_tableは作成した記憶がないです。ここがポイントかもしれませんね。
    サイトを勉強していくうえで簡単に考えていました。test105.pyを保存してpsycopg2をinstallすればできるという安易な考え方でした。サイト管理者の方にその時点で(1年前)に質問したら
    ”現在作業されている部分は標準ライブラリではないので
    勉強される必要性はあまりないように思います。”と返事をいただきましていろいろな勉強をするうちに再度Pythonを勉強しなおしたくってやり始めました。Pythonスタートブック、みんなのPython(3系)もやり直しましたがこの分野には触れられていなくいろいろ検索しまくりましたが答えが見つからなくお助けいただいている状況です。
    connector = psycopg2.connect(host="localhost",database="pdb",user="pgusr",password="pgpsw")
    この部分は
    connector = psycopg2.connect(host="localhost",database="pdb",user="postgres",password="pgpsw",port=5432)にしています

    (# -*- coding: utf-8 -*- 最初に記述しています)
    検証はこの状態でしました。インデントは多分Tabを使っているので問題はないと思います。

    キャンセル

  • 2016/06/17 14:11

    test_tableは事前に作成しておく必要があります。

    検証#1のCREATE TABLEを参考にして作成して下さい。(必要な列名やデータ型は、ご自身の目的に合わせて変更して下さい。)

    これはこれで問題なのですが、テーブルが存在していない場合、NameError: global name 'pdb' is not defined というエラーにはならないと思いますので、他にも何かまだ間違いがありそうです。

    前にお願いしてあった質問文の修正を、やっていただけませんでしょうか?

    キャンセル

  • 2016/06/17 15:44

    お世話になります。とりあえずサンプル的なtest_tableを作成いたしました。
    Server [localhost]:
    Database [postgres]:
    Port [5432]:
    Username [postgres]:
    Client Encoding [SJIS]:
    psql (9.5.3)
    "help" でヘルプを表示します.

    postgres=# \connect pdb;
    データベース "pdb" にユーザ"postgres"として接続しました。
    pdb=# \d test_table;
    テーブル "public.test_table"
    列 | 型 | 修飾語
    --------+------+--------
    sample | text |

    pdb=#
    コードブロックで囲む方法は、質問文の修正画面で、ソースコードをすべて選択した状態で </> というボタンをクリックします。→実施しましたがよくわかりません。更新もしました???何も変わらないので???
    相変わらず
    c:\python>python test105.py
    Traceback (most recent call last):
    File "test105.py", line 7, in <module>
    connector = psycopg2.connect(host="localhost",database="pdb",user="postgres",password="pgpsw",port=5432)
    File "c:\python\psycopg2\__init__.py", line 140, in connect
    items.append(('database', pdb))
    NameError: global name 'pdb' is not defined
    となります。psycopg2のインストールに問題があるのですかね?インストールは
    私はhttp://initd.org/psycopg/download/から
    psycopg2-2.6.1.win32-py2.7-pg9.4.4-release.exeをインストールしました。

    キャンセル

  • 2016/06/17 16:29

    こちらの環境に入っている psycopg2 の内容を確認したのですが、__init__.py の 140行目が違っていますね。こちらのファイルでは 140行目は "items.append(('dbname', database))"になっています。前にこのファイルを修正したとおっしゃっていませんでしたか?元に戻すようにお伝えしましたが、その時に戻し間違いをなさったということはないでしょうか?

    ちなみにですが、こちらの環境ではPythonとpsycopg2は以下の手順でインストールしました。

    (1) https://www.python.org/downloads/ の「Download Python 2.7.11」という黄色いボタンからインストーラーをダウンロードして、これを実行。インストール先のフォルダは "C:\Python27" (デフォルト)です。

    (2) 環境変数PATHに、"C:\Python27;C:\Python27\Scripts;" を追加。

    (3) コマンドプロンプトから "pip install psycopg2" を実行。インストールされているpsycopg2のバージョンは 2.6.1 です。

    同じ手順で改めてインストールしてみてはいかがでしょうか。

    キャンセル

  • 2016/06/17 18:58

    ありがとうございます。お教えいただいたとおりにやってみます。これが解決しないと次に進めずご迷惑をおかけしていることお詫び申し上げます。実行したらご報告いたします。ありがとうございます。

    キャンセル

  • 2016/06/18 09:04

    お世話になっております。"C:\Python27;C:\Python27\Scripts;"をPathに通していたつもりが後で追加したC:\Python27\Scripts;が通っていませんでした。なのでpip install psycopg2がインストールできませんでした(しかしPathを通し確認できました)その後test105.pyを実行すると
    C:\Users\User>cd c:\python

    c:\python>python test105.py
    Traceback (most recent call last):
    File "test105.py", line 11, in <module>
    cursor.execute(sql)
    psycopg2.DataError: invalid input syntax for integer: "python"
    LINE 1: insert into test_table values('1','python')となります。あともう少しだとはわかるのですが・・・・・

    キャンセル

  • 2016/06/18 10:45

    connectの部分で発生していたエラーは解消して、次の行へ進むことができたということですね。やはりpsycopg2のインストールに問題があったのでしょう。

    今度のエラーは単純なSQL構文エラーです。test_table には今のところtext型のsampleという列が一つしか定義されていないのではありませんか?一つの列しか定義されていないのに '1' と 'python' という2つの列データを挿入しようとして失敗しています。

    まずは、現在の test_table テーブルの定義を再確認されてはいかがでしょう。psql で "\d test_table;" を実行すると定義を確認できます。適当に作ってしまった列名やデータ型などを整理するために、一度テーブルを削除して再作成する必要があるかもしれません。

    さて、これまでPostgreSQLとpsycopg2の組み合わせが正常に動作していないという内容の質問へのアドバイスをさせていただきましたが、ついにこの問題は解決できました。
    ここから先は純粋にデータベース操作(主にテーブル設計やデータの挿入、抽出、更新、削除など)やPythonのプログラミングに関する問題や疑問が出てくると思います。このスレッドのタイトルとは違う内容になってきますので、一つ一つ自分でお調べになり、どうしても解らないことがあれば、別の質問として投稿されるほうがよろしいでしょう。

    引き続きがんばってくださいね。応援してます。

    キャンセル

  • 2016/06/18 10:45

    キャンセル

  • 2016/06/18 12:10

    長い時間ありがとうございました。少しだけ仕組みがわかりました。データーベースは一つでも間違えばつながらない。今後はエラー内容がわかるようにならないと駄目ですね。私はわからないままほったらかしにできない性分ですのでいろいろお助けいただき感謝申し上げます。本当にありがとうございました。もう毎日勉強あるのみです重ねてお礼申し上げます

    キャンセル

  • 2016/06/18 14:36

    ありがとうございました。やっとできました。ただしWin7で試した分がOKになりました。
    Win10ではまだエラーが出ます。なのでシステムの復元をしてやり直してみます。(ゴミが残っている可能性がありますので。私の場合エラー内容の理解ができるようにならないとまだ時間がかかると思います。いずれにしてもありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • Python 2.7

    1468questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。