sqlalchemy 및 pyodbc를 사용하여 SQL Server 2012에 연결
Python 3.3(윈도우즈 7-64비트)에서 SQLAlchemy(pyodbc 포함)를 사용하여 SQL Server 2012 데이터베이스에 연결하려고 합니다.저는 직선 pyodbc를 사용하여 연결할 수 있지만 SQL 화학을 사용하여 연결하는 데는 실패했습니다.데이터베이스 액세스를 위한 DSN 파일을 설정했습니다.
나는 다음과 같은 직선 pyodbc를 사용하여 성공적으로 연결합니다.
con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn')
sqlalchemy를 위해 시도해 보았습니다.
import sqlalchemy as sa
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname')
그create_engine
메소드는 실제로 연결을 설정하지 않고 성공하지만, 만약 내가 sqlalchemy가 실제로 연결을 설정하게 하는 것을 시도한다면 (예:engine.table_names()
), 시간이 좀 걸리지만 다음 오류를 반환합니다.
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 클래스를 성공적으로 사용했습니다.
SQL 화학에서 파일 기반 DSN 문자열을 서버 이름 =(으)로 해석하고 있습니다.c
데이터베이스 이름 =users
.
DSN을 사용하지 않고 연결하는 것을 선호합니다. 코드 마이그레이션 중에 처리해야 하는 구성 작업이 하나 적습니다.
이 구문은 Windows 인증을 사용하여 작동합니다.
engine = sa.create_engine('mssql+pyodbc://server/database')
또는 SQL 인증을 사용할 경우:
engine = sa.create_engine('mssql+pyodbc://user:password@server/database')
SQLAlchemy에는 다양한 연결 문자열 옵션에 대한 자세한 설명이 나와 있습니다.
Python 3에서는 모듈의 함수를 사용할 수 있습니다.urllib.parse
연결을 위한 매개 변수를 만드는 방법:
import urllib
params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};"
"SERVER=dagger;"
"DATABASE=test;"
"UID=user;"
"PWD=password")
engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))
Windows Authentication을 사용하려면 Trusted_Connection을 매개 변수로 사용합니다.
params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};"
"SERVER=dagger;"
"DATABASE=test;"
"Trusted_Connection=yes")
Python 2에서는 라이브러리의 함수를 사용해야 합니다.urllib
대신:
params = urllib.quote_plus("DRIVER={SQL Server Native Client 11.0};"
"SERVER=dagger;"
"DATABASE=test;"
"UID=user;"
"PWD=password")
DSN 및 윈도우즈 인증을 사용하지 않고 MSSQL Server에 연결하는 방법에 대한 업데이트 정보가 있습니다.이 예에서는 다음과 같은 옵션이 있습니다.로컬 서버 이름은 "(localdb)\"입니다.프로젝트 V12".데이터베이스 속성에 표시되는 로컬 서버 이름(Windows 10 / Visual Studio 2015 사용 중)내 DB 이름은 "MainTest1"입니다.
engine = create_engine('mssql+pyodbc://(localdb)\ProjectsV12/MainTest1?driver=SQL+Server+Native+Client+11.0', echo=True)
연결할 드라이버를 지정해야 합니다.클라이언트 버전은 다음에서 찾을 수 있습니다.
제어판>시스템 및 보안>관리 도구.>ODBC 데이터 원본>시스템 DSN 탭>더하다
목록에서 SQL Native 클라이언트 버전을 확인합니다.
여기에 몇 가지 최신 정보를 추가하고 싶습니다.DSN 연결을 사용하여 연결하는 경우:
engine = create_engine("mssql+pyodbc://USERNAME:PASSWORD@SOME_DSN")
호스트 이름 연결을 사용하여 연결하는 경우:
engine = create_engine("mssql+pyodbc://USERNAME:PASSWORD@HOST_IP:PORT/DATABASENAME?driver=SQL+Server+Native+Client+11.0")
자세한 내용은 "공문서"를 참조하십시오.
import pyodbc
import sqlalchemy as sa
engine = sa.create_engine('mssql+pyodbc://ServerName/DatabaseName?driver=SQL+Server+Native+Client+11.0',echo = True)
이 기능은 Windows 인증과 함께 작동합니다.
저는 다르게 했고 매력적으로 일했습니다.
먼저 라이브러리를 가져옵니다.
import pandas as pd
from sqlalchemy import create_engine
import pyodbc
엔진을 만드는 기능을 만듭니다.
def mssql_engine(user = os.getenv('user'), password = os.getenv('password')
,host = os.getenv('SERVER_ADDRESS'),db = os.getenv('DATABASE')):
engine = create_engine(f'mssql+pyodbc://{user}:{password}@{host}/{db}?driver=SQL+Server')
return engine
쿼리를 사용하여 변수 만들기
query = 'SELECT * FROM [Orders]'
Pandas 명령을 실행하여 MSSQL 테이블에서 데이터 프레임 생성
df = pd.read_sql(query, mssql_engine())
언급URL : https://stackoverflow.com/questions/15750711/connecting-to-sql-server-2012-using-sqlalchemy-and-pyodbc
'programing' 카테고리의 다른 글
SQL Server Management Studio [Schema and data]를 사용하여 테이블을 다시 만드는 스크립트를 생성하는 방법은 무엇입니까? (0) | 2023.08.09 |
---|---|
자바스크립트로 길게 누르기? (0) | 2023.08.09 |
드롭존에 기존 이미지 파일 추가 (0) | 2023.08.09 |
안드로이드에서 이미지 회전을 원활하게 하는 방법은 무엇입니까? (0) | 2023.08.09 |
char가 서명된 경우 "char foo = 255"가 정의되지 않은 동작입니까? (0) | 2023.08.09 |