2015-01-28 3 views
1

python에서 AWS Redshift 데이터베이스에 연결할 시스템을 설정 중입니다. isql을 통해 연결할 수 있기 때문에 python 스크립트에 문제가 있다고 생각합니다. 나는 모든 관련 패키지를 설치 한, 다음과 같이 나는 isql을 통해 연결할 수 있어요 :하지만, 내 파이썬 스크립트는 연결 실패pyodbc - [unixODBC] [드라이버 관리자] 데이터 소스 이름을 찾을 수없고 기본 드라이버가 지정되지 않았습니다.

$ isql rndredshift readonly ***** -v 
+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL> quit 

.

=========== 
Uid=readonly;Database=prod;ServerName=rndredshift;Driver={PostgreSQL}; Server=10.191.4.97;Pwd=********;Port=5439 
=========== 
Traceback (most recent call last): 
    File "test_redshift.py", line 24, in <module> 
    sys.exit(main()) 
    File "test_redshift.py", line 17, in main 
    new_conn2 = pyodbc.connect(redshift_conn_str) 
pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnectW)') 

PosgreSQL 드라이버가 설치됩니다 : 여기

import pyodbc 
import sys 

def main(): 
    redshift_conn_str = assemble_connection_string(
     Driver='{PostgreSQL}', 
     Server='10.191.4.97', 
     ServerName='rndredshift', 
     Port='5439', 
     Database='prod', 
     Uid='readonly', 
     Pwd='*******' 
    ) 
    print("===========") 
    print(redshift_conn_str) 
    print("===========") 
    new_conn2 = pyodbc.connect(redshift_conn_str) 
    print(psql.read_sql('select top 10 * from rawdb.raw_imprequest_20150101', new_conn2)) 

def assemble_connection_string(**kwargs): 
    return ';'.join([k + '=' + v for (k, v) in kwargs.items()]) 

if __name__ == '__main__': 
    sys.exit(main()) 

출력 것 :

$ odbcinst -q -d 
[PostgreSQL] 
[MySQL] 

그리고 데이터 소스가 구성되어

$ odbcinst -q -s 
[rndredshift] 

답변

0

만약 여기에 스크립트입니다 당신은 D를 사용하고 있습니다. SNs, 당신은 연결 문자열에 지정해야합니다. 또한 DSN없는 연결을 사용하려면 키워드가 SERVER이고 SERVERNAME이 아닌 것으로 판단됩니다.

이 연결 문자열을 사용해보십시오.

Uid=readonly;Database=prod;DSN=rndredshift;Driver={PostgreSQL};Pwd=********; 

odbc.ini에도 전체 서버 이름과 포트를 지정했는지 확인하십시오. 또한 PostgreSQL을 사용하고 있기 때문에 기본 PostgreSQL 드라이버를 사용하지 않는 이유가 무엇입니까? 행운

https://wiki.postgresql.org/wiki/Psycopg

좋은!

-1

다음은 연결 문자열입니다. Uid = 읽기 전용, 데이터베이스 = prod, ServerName = rndredshift, 드라이버 = {PostgreSQL}; Server = 10.191.4.97; Pwd = ********; Port = 5439

ServerName 대신 DSN을 사용하면 작동하지 않습니다.

0

또한 저는 PostgreSQL 드라이버를 구해서 설치하는 방법에 대해 혼란스러워했습니다. 나는 인 unixODBC를 설치 한 경우, ODBCINST.INI 파일이 생성이이 보였다 PostgreSQL의 드라이버에 대한 항목이 포함되었다 : 그러나

[PostgreSQL] 
Description  = ODBC for PostgreSQL 
Driver   = /usr/lib/psqlodbc.so 
Setup   = /usr/lib/libodbcpsqlS.so 
Driver64  = /usr/lib64/psqlodbc.so 
Setup64   = /usr/lib64/libodbcpsqlS.so 
FileUsage  = 1 

이 아닌 시스템에서 드라이버 및 Driver64의 파일을. 그래서 postgresql-odbc를 설치했는데,이 라이브러리는 누락 된 라이브러리를 제공합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 앞서 언급했듯이 isql은 잘 작동하므로 여전히 파이썬 문제라고 생각합니다.

0

psycopg2 패키지를 사용하기로 결심했습니다. 작동하려면 연결해야합니다! 여기 내 스크립트입니다 : 그래서

import sys 
import psycopg2 

def main(): 

    conn_string = "host='10.191.4.97' dbname='prod' user='readonly' password='****' port='5439'" 
    print("===========") 
    print(conn_string) 
    print("===========") 
    new_conn2 = psycopg2.connect(conn_string) 
    print("Connected using psycopg2!") 

if __name__ == '__main__': 
    sys.exit(main()) 

, 내가 연결할 수 있는지 행복 해요하지만, 문제는 여전히 pyodbc와 PostgreSQL을 연결 문자열에 대해 남아있다. 생각?

관련 문제