私は '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)
私はエンジン内のデータベースが含まれていますが、そのようなクエリに追加していない場合は、上記の合流でのコードのような休憩:
私は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.S.私は接続しているこのサーバーへの読み取りアクセス権しか持っていません。新しいテーブルやビューなどを作成することはできません。
更新日: MS SQL Serverのバージョンは2008 R2です。
アップデート2:(import文で、エンジンの両方)の代わりにpyodbcのpymssqlを使用します。私は、だから私は、回避策を発見したのPython 3.6とWindows 10.
あなたのMS SQL Serverのバージョンは何ですか? – MaxU
@MaxU 2008 R2です。 –
'SQL + Server + Native + Client + 10.0'をドライバとして試してみてください... [関連する質問](http:// stackoverflow。//41729710/5741205) – MaxU