2015-02-02 3 views
1

테스트 서버에 연결하고 pyodbc를 사용하여 SQL 쿼리를 실행해야합니다. 이를 위해서는 먼저 ODBCINI 환경 변수를 설정해야합니다. 나는 그것을 파이썬 코드에서 서브 프로세스를 사용하여 포함 시키려고했다. 다음은 python에서 ODBCINI를 내보내는 하위 프로세스를 사용하는 중 오류가 발생 했습니까?

import subprocess 
import pyodbc 

bashCommand = "export ODBCINI=~/odbc.ini" 
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE, shell=True) 

pyodbc.pooling = False 
conn = pyodbc.connect(DSN='test',autocommit=True,ansi=True) 
cur = conn.cursor() 

내가

Traceback (most recent call last): 
    File "my_si_web_impressions_bcookie_dealid.py", line 15, in <module> 
    conn = pyodbc.connect(DSN='tdwb',autocommit=True,ansi=True) 
pyodbc.Error: ('IM002', '[IM002] [DataDirect][ODBC lib] System information file not found. Please check the ODBCINI environment variable. (0) (SQLDriverConnect)') 

나는 그것이 서버에 연결할 수 있도록 그것은 ODBCINI 변수를 수출 din't 것을 의미 추측을 얻을 오류입니다. 누구든지 도와 줄 수 있습니까?

답변

0

생성 된 서브 프로세스는 자신의 환경에만 영향을 미칠 수 있으므로 의도 한대로 작동하지 않습니다. 따라서 자신이 생성 한 프로세스 중 하나가 해당 프로세스를 상속 할 때 생성됩니다.

그래서 bash 명령은 본질적으로 NOP입니다.

대신, 당신은 os.environ 사용하여 자신의 환경을 조작해야합니다

import os 
os.environ["ODBCINI"]="~/odbc.ini" 

그런 다음 연결 작동합니다.

+0

나는 이것을 시도했다. '#!는/usr/빈/ENV 파이썬 수입 pyodbc 수입 OS os.environ [ "ODBCINI"] = "~/ODBC.INI" pyodbc.pooling = 거짓 CONN = pyodbc.connect (DSN = '테스트', 자동 커밋 = 사실, ANSI = 참) CUR = conn.cursor()' 여전히 같은 오류 '역 추적 (가장 최근 통화 최종) : 파일 "temp.py", 8 호선, 에서 conn = pyodbc.connect (DSN = 'test', autocommit = True, ansi = True) pyodbc.Error : ('IM002', [IM002] [DataDirect] [ODBC lib] 시스템 정보 파일을 찾을 수 없습니다. ODBCINI 환경 변수 (0) (SQLDriverConnect) ')' – shubham

+0

인수에 os.expanduser를 호출해야 할 수도 있습니다. 또는 전체 경로로 지정합니다 (예 : "/home/foobar/odbc.ini" – deets

+0

명백한 질문 : 파일이 존재합니까? 변수 설정 후에 "assert os.path.exists (os.environ [ 'ODBCINI'])"구문을 넣으십시오. – deets

관련 문제