'pandas.read_sql_query'를 사용하여 MS SQL Server에서 pandas DataFrame으로 데이터를 복사하려고합니다. 내 SQL 쿼리에서 여러 조인을해야합니다. 결합 된 테이블은 동일한 서버에 있지만 다른 데이터베이스에 있습니다. pandas에 전달할 쿼리는 MS SQL Server Management Studio에서 올바르게 작동합니다. Jupyter 노트북에서 나는과 같이 데이터를 쿼리하려고 (단지 2 단순화 가지 쿼리 자체를 읽을 수 있도록 조인 및 일반 이름이 사용됩니다) :MS SQL Server에서 sqlalchemy + pyodbc 및 여러 데이터베이스로 pandas read_sql 용 sql 연금술 연결을 만드는 방법은 무엇입니까?
이import pandas as pd
import sqlalchemy as sql
import pyodbc
server = '100.10.10.10'
driver = 'SQL+Server+Native+Client+11.0'
myQuery = '''SELECT first.Field1, second.Field2
FROM db1.schema.Table1 AS first
JOIN db2.schema.Table2 AS second
ON first.Id = second.FirstId
'''
engine = sql.create_engine('mssql+pyodbc://{}?driver={}'.format(server, driver))
df = pd.read_sql_query(myQuery, engine)
이 작동하지 않고 오류를 반환 :
DBAPIError: (pyodbc.Error) ('IM010', '[IM010] [Microsoft][��������� ��������� ODBC] ������� ������� ��� ��������� ������ (0) (SQLDriverConnect)')
이 모든 것을 내가 엔진에 데이터베이스를 포함하는 코드의 다음 종류와 함께 잘 작동하기 때문에 문제가 데이터베이스에 대한 정보를 포함하지 않는 엔진 것 같다 :
myQuery = 'select Field1 from schema.Table1'
db = 'db1'
engine = sql.create_engine('mssql+pyodbc://{}/{}?driver={}'.format(server, db, driver))
df = pd.read_sql_query(myQuery, engine)
,691,363 (210)
하지만 엔진의 데이터베이스를 포함하지만과 같이 쿼리에 추가하지 않는 경우 위의 결합으로 코드 같은 휴식 :
나는 pandas.read_sql_query 'SQL'를 지정하는 방법에 따라서myQuery = 'select Field1 from db1.schema.Table1'
engine = sql.create_engine('mssql+pyodbc://{}?driver={}'.format(server,
driver))
df = pd.read_sql_query(myQuery, engine)
및 'con'매개 변수가 이 경우 다른 데이터베이스의 테이블을 조인 할 필요가 있지만 같은 서버입니까?
P. 연결하려는이 서버에 대한 읽기 액세스 권한 만 있습니다. 새 테이블이나 뷰 또는 이와 유사한 것을 만들 수는 없습니다.
업데이트 : MS SQL Server 버전은 2008 R2입니다.
업데이트 2 : (모두 가져 오기 문에서 엔진에서) 사용 pymssql 대신 pyodbc : 나는 파이썬 3.6 및 Windows 10
MS SQL Server 버전은 무엇입니까? – MaxU
@MaxU 2008 R2입니다. –
'SQL + Server + Native + Client + 10.0'을 드라이버로 사용해보십시오 ... [관련 질문] (http : // stackoverflow.com/a/41729710/5741205) – MaxU