2013-04-01 3 views
8

Python 3.3 (Windows 7-64 비트)에서 SQLAlchemy (pyodbc)를 사용하여 SQL Server 2012 데이터베이스에 연결하려고합니다. 직선 pyodbc를 사용하여 연결할 수는 있지만 SQLAlchemy를 사용하여 연결하는 데 실패했습니다. 데이터베이스 액세스를위한 dsn 파일 설정이 있습니다.sqlalchemy 및 pyodbc를 사용하여 SQL Server 2012에 연결

내가 성공적으로 다음과 같이 직선 pyodbc를 사용하여 연결 :

import sqlalchemy as sa 
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname') 

create_engine 방법은 실제로 연결을 설정하고 성공하지 않지만, IIF :

con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn') 

을 SQLAlchemy의 위해 나는 노력했다 나는 실제로 (처럼) 연결을 설정하기 위해 sqlalchemy를 시도하는 무언가를 시도하지만 잠시 시간이 걸리지 만이 오류를 반환한다 :

DBAPIError: (Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)') None None

어디서 잘못 될지 모르겠지만 실제로 연결 문자열이 sqlalchemy에 의해 pyodbc로 전달되는 것을 확인하는 방법입니다. 나는 SQLite와 MySQL에서 같은 sqlalchemy 클래스를 성공적으로 사용했다.

미리 감사드립니다.

답변

21

파일 기반 DSN 문자열은 SQLAlchemy에서 서버 이름 = c, 데이터베이스 이름 = users으로 해석됩니다.

코드를 마이그레이션하는 동안 DSN을 사용하지 않고 연결하는 것이 더 편한 구성 작업입니다.

이 구문은 Windows 인증을 사용하여 작동 :

engine = sa.create_engine('mssql+pyodbc://server/database') 

또는 SQL 인증을 사용 :

engine = sa.create_engine('mssql+pyodbc://user:[email protected]/database') 

SQLAlchemy의는 다른 연결 문자열 옵션 here의 철저한 설명이 있습니다.

+2

감사합니다. SQL Server 인스턴스는 내가 작업하고있는 컴퓨터에없는 유일한 인스턴스이므로 여기서 재미있는 일이 있는지 확실하지 않았습니다. SQL 서버 인스턴스가 명시 적으로 이름 지어 졌으므로 목록에 표시 한 내용을 약간 확장하면됩니다. - sa.create_engine ('mssql + pyodbc : // [machinename] \\ [servername]/[database]') ' –

+1

이름을 지어야합니다. 실제로 "기본 인스턴스"로 구성된 SQL Server 인스턴스에 연결하여 사용하는 것이 더 쉽습니다. 한 서버에서 여러 SQL Server 인스턴스를 호스팅 할 때 명명 된 인스턴스가 필요합니다. – marr75

6

DSN 및 Windows 인증을 사용하지 않고 MSSQL Server에 대한 업데이트 정보가 있습니다. 내 예제에서는 다음 옵션이 있습니다. 로컬 서버 이름은 "(localdb) \ ProjectsV12"입니다. 로컬 서버 이름 데이터베이스 속성에서 볼 수 있습니다 (Windows 10/Visual Studio 2015를 사용하고 있습니다). 내 DB 이름 관련 드라이버를 지정하는 데 필요한

engine = create_engine('mssql+pyodbc://(localdb)\ProjectsV12/MainTest1?driver=SQL+Server+Native+Client+11.0', echo=True) 

"MainTest1"입니다. 당신은 당신의 클라이언트 버전을 찾을 수 있습니다 : 목록에서 SQL 네이티브 클라이언트 버전에

control panel>Systems and Security>Administrative Tools.>ODBC Data Sources>System DSN tab>Add

봐.

+0

이것은 나를 위해 일한 유일한 것입니다. 많은 감사합니다! – Barka