2015-12-22 13 views
7

pyodbcを使用してPostgresに接続しようとしています。pyodbcをPostgresに接続

私は、iSQLでDBに接続することができます。

echo "select 1" | isql -v my-connector 

戻り値:

+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL> select 1 
+------------+ 
| ?column? | 
+------------+ 
| 1   | 
+------------+ 
SQLRowCount returns 1 
1 rows fetched 

しかし、私はpyodbcに接続しよう:

import pyodbc 
con = pyodbc.connect("DRIVER={PostgreSQL Unicode}; DATABASE=<dbname>;  UID=<username>; PWD=<password>; SERVER=localhost; PORT=5432;") 

を私は次のエラーを取得します:

pyodbc.Error: ('08001', '[08001] [unixODBC]connction string lacks some options (202) (SQLDriverConnect)') 

obdc.iniファイルには、次のようになります。

[PostgreSQL ANSI] 
Description  = PostgreSQL ODBC driver (ANSI version) 
Driver   = psqlodbca.so 
Setup   = libodbcpsqlS.so 
Debug   = 0 
CommLog   = 1 
UsageCount  = 1 

[PostgreSQL Unicode] 
Description  = PostgreSQL ODBC driver (Unicode version) 
Driver   = psqlodbcw.so 
Setup   = libodbcpsqlS.so 
Debug   = 0 
CommLog   = 1 
UsageCount  = 1 

注:

  • のUbuntu 14.04
  • Pythonの3
  • [my-connector] 
    Description   = PostgreSQL connection to '<dbname>' database 
    Driver    = PostgreSQL Unicode 
    Database   = <dbname> 
    Servername   = localhost 
    UserName   = <username> 
    Password   = <password> 
    Port    = 5432 
    Protocol   = 9.3 
    ReadOnly   = No 
    RowVersioning  = No 
    ShowSystemTables = No 
    ShowOidColumn  = No 
    FakeOidIndex  = No 
    ConnSettings  = 
    

    ODBCINST.INIファイルには、次のようになります

  • PostgreSQL 9.3

私は過去にpsycopg2を使ってPostgresに接続しましたが、私の現在の会社はNetezza、Postgres、MySQLを使用しています。私は1つの接続モジュールを書いて、別々のドライバを使って異なるデータベースに接続したい。 ご協力いただければ幸いです。

- おかげ

+0

まず、すべてのrgumentsを接続文字列のodbc.iniエントリから取り出し、それが機能するかどうか確認してください。 –

+0

@GordThompson - ありがとう。それを試し、まだ運がない。 –

+1

'DSN = my-connector'だけを使うとうまくいくのですか? –

答えて

4

あなたはすでに、あなただけでは使用することができますodbc.iniファイルで定義された作業DSN持っているので:、記録のために、また、あなたの接続には、余分な空白を

con = pyodbc.connect("DSN=my-connector") 

を文字列が問題を混乱させている可能性があります。これはPython 2.7の下で、少なくとも私にとってはうまくいったからです。

import pyodbc 
conn_str = (
    "DRIVER={PostgreSQL Unicode};" 
    "DATABASE=postgres;" 
    "UID=postgres;" 
    "PWD=whatever;" 
    "SERVER=localhost;" 
    "PORT=5432;" 
    ) 
conn = pyodbc.connect(conn_str) 
crsr = conn.execute("SELECT 123 AS n") 
row = crsr.fetchone() 
print(row) 
crsr.close() 
conn.close() 
関連する問題