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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

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

Q&A

解決済

1回答

8108閲覧

Windows10のPythonからPostgreSQLに接続する

Casablanca_mtg

総合スコア209

Python 2.7

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

0グッド

0クリップ

投稿2016/06/07 01:39

編集2016/06/07 03:19

使用している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?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toshi_yama

2016/06/07 02:30

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

2016/06/07 03:07

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

回答1

0

ベストアンサー

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

  1. PostgreSQLが正常に起動されていることを確認する。

コマンドプロンプトで "netstat -anp tcp" を実行し、ローカルアドレスが "0.0.0.0:5432" で状態が "LISTENING" になっているソケットがあることを確認する。これが存在していない場合、PostgreSQLが起動されていないと考えられます。
0. 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 04:04

編集2016/06/16 22:38
tkanda

総合スコア2425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Casablanca_mtg

2016/06/07 04: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の内容が一致しないということですか? よろしくご指導ください
Casablanca_mtg

2016/06/07 05: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"が定義されていないと出ます。この意味がよくわかりません
Casablanca_mtg

2016/06/10 03:14

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

2016/06/10 04:43 編集

RyokoMoriuchi さん、コメントがあったことに気づかず失礼しました。 2016/06/07 13:49 のコメントにあるエラーは、psycopg というユーザーのパスワード認証が失敗したという意味です。(ユーザー名、パスワードが間違えている可能性が高い) psycopg2 の __init__.py の line 164 と同じにしろという意味ではないので、もしそのように修正してしまったのなら、もとの状態に戻したほうがいいです。 それと、このスレッドのもともとのエラー(最初の質問に含まれていたエラー)とは、別の問題に話題が移っていますので、もしユーザー名とパスワードの件が自力で解決できなければ、「PostgreSql パスワード認証が失敗します」のようなタイトルで、別の質問を投稿することをお勧めします。
Casablanca_mtg

2016/06/14 01: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も勉強し始めましたが・・・・よろしくお願いいたします
tkanda

2016/06/14 22:49

私の最初の回答に書いた2つのポイントが問題ないのに接続に失敗するようですと、PostgreSQL本体のインストールがうまく行われていない可能性を疑う必要があります。 一度、PostgreSQLをアンインストールして、改めて正しい手順でインストールしてみてはいかがでしょうか。現在お使いのOSによってインストール手順は違いがあります。例えば、Windowsでしたら下記のサイトに解りやすく書かれています。このサイトの手順を最初から最後まできちんと実行してみてはいかがでしょうか。 PostgreSQLインストール (http://www.dbonline.jp/postgresinstall/)
Casablanca_mtg

2016/06/15 03: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は触っていません。
tkanda

2016/06/15 04:16

postgresというユーザーは登録済みですか?確認のため、コマンドプロンプトで以下のコマンドを実行してみてください。 > psql -u postgres -W -Wオプションは明示的なパスワード入力を強制する(パスワードを入力しないとログインできなくする)ためのものです。これでPSQLシェルにpostgres というアカウントでログインできるはずです。このログインができない場合、パスワードが間違っています。 まずは、これでログインができることを確認しましょう。
tkanda

2016/06/15 04:50

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

2016/06/15 05: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=# どうしてもクリアしたいですのでよろしくお願いいたします。
Casablanca_mtg

2016/06/15 05:40

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

2016/06/15 06:35

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

2016/06/15 08:25

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

2016/06/15 12: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" を実行できることを確認する。
tkanda

2016/06/15 12:43

私が誘導したインストール手順が古いバージョンのものだったために混乱させてしまい、失礼いたしました。 ネットを検索したところ、新しいバージョンのインストール手順で参考になるものが見つかりましたのでご紹介します。 http://www.uptime.jp/ja/resources/techdocs/2015/02/installing_postgresql_9_4_on_windows/ このページの一番下にある「ダウンロード:PostgreSQL/Apache/PHP for Windows インストールガイド(9.4対応版)」というリンクからダウンロードできるPDFが新しい情報をカバーしています。改めてご参考になさってください。
Casablanca_mtg

2016/06/16 00: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のドキュメンティーションを読んで理解すべきですか?
tkanda

2016/06/16 03:26

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

2016/06/16 03:57

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

2016/06/16 04:22

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

2016/06/16 04: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=#"というプロンプトが出たら、コマンド等を入力開始)。
Casablanca_mtg

2016/06/16 06: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=# このようになります
Casablanca_mtg

2016/06/16 06:38

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

2016/06/16 09:15 編集

"username [postgres]"と"password[pgpsw]"は不要です。この2行を無くして、ログインの最初からやり直してみてください。 ちなみに、#1の手順をすべて完了できていない場合、#2の手順で "no results to fetch" というエラーが出るのは正しい動作です。
Casablanca_mtg

2016/06/16 14:05

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

2016/06/16 21:47

#2の手順で "no results to fetch" というエラーが出るのは、#1を完了できていない場合に限ります。 もし#1の手順をすべて完了した場合、#2では#1の8と同じ抽出結果が表示されるはずです。#1も#2も、タイプミスなどが無いように、気を付けてください。 ゴールが近い感じがしますね。頑張ってください。
tkanda

2016/06/16 22:41

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

2016/06/17 01:48 編集

お世話になります。全部クリアしました。がしかし、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のコマンドプロンプトからはエラーが返るのはなぜなのでしょうか? 本当に申し訳ございませんがもう少しの時間お助けください。よろしくお願いいたします
tkanda

2016/06/17 02:00 編集

そうですね、そうするとtest105.pyになにか構文エラー等があるのかもしれません。このtest105.pyは、最初の質問にあるソースコードと全く同じ内容ですか?改めて確認してください。 それと、最初の質問文のソースコード部分をコードブロックで囲むように修正しましょう。そうしないと、インデントが正しく表示されません。コードブロックで囲む方法は、質問文の修正画面で、ソースコードをすべて選択した状態で </> というボタンをクリックします。
tkanda

2016/06/17 02:45

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

2016/06/17 04: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を使っているので問題はないと思います。
tkanda

2016/06/17 05:11

test_tableは事前に作成しておく必要があります。 検証#1のCREATE TABLEを参考にして作成して下さい。(必要な列名やデータ型は、ご自身の目的に合わせて変更して下さい。) これはこれで問題なのですが、テーブルが存在していない場合、NameError: global name 'pdb' is not defined というエラーにはならないと思いますので、他にも何かまだ間違いがありそうです。 前にお願いしてあった質問文の修正を、やっていただけませんでしょうか?
Casablanca_mtg

2016/06/17 06: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をインストールしました。
tkanda

2016/06/17 07: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 です。 同じ手順で改めてインストールしてみてはいかがでしょうか。
Casablanca_mtg

2016/06/17 09:58

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

2016/06/18 00: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')となります。あともう少しだとはわかるのですが・・・・・
tkanda

2016/06/18 01:45

connectの部分で発生していたエラーは解消して、次の行へ進むことができたということですね。やはりpsycopg2のインストールに問題があったのでしょう。 今度のエラーは単純なSQL構文エラーです。test_table には今のところtext型のsampleという列が一つしか定義されていないのではありませんか?一つの列しか定義されていないのに '1' と 'python' という2つの列データを挿入しようとして失敗しています。 まずは、現在の test_table テーブルの定義を再確認されてはいかがでしょう。psql で "\d test_table;" を実行すると定義を確認できます。適当に作ってしまった列名やデータ型などを整理するために、一度テーブルを削除して再作成する必要があるかもしれません。 さて、これまでPostgreSQLとpsycopg2の組み合わせが正常に動作していないという内容の質問へのアドバイスをさせていただきましたが、ついにこの問題は解決できました。 ここから先は純粋にデータベース操作(主にテーブル設計やデータの挿入、抽出、更新、削除など)やPythonのプログラミングに関する問題や疑問が出てくると思います。このスレッドのタイトルとは違う内容になってきますので、一つ一つ自分でお調べになり、どうしても解らないことがあれば、別の質問として投稿されるほうがよろしいでしょう。 引き続きがんばってくださいね。応援してます。
Casablanca_mtg

2016/06/18 03:10

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

2016/06/18 05:36

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問