programing

sqlalchemy 및 pyodbc를 사용하여 SQL Server 2012에 연결

closeapi 2023. 8. 9. 20:45
반응형

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

반응형