Azure VM マシンの Python スクリプトから Azure Managed Instance (IP: xxxx.database.windows.net) の SQL データベースのテーブルにアクセスしようとしていますが、以下の操作エラーが発生します。以下の2つの異なる方法で試しました。
エラー:
OperationalError: ('08001', '[08001] [Microsoft][SQL Server Native Client 11.0]TCP プロバイダー: 接続先が一定期間後に適切に応答しなかったため、接続の試行に失敗したか、接続されたホストが応答に失敗しました.\r\n (10060) (SQLDriverConnect); [08001] [Microsoft][SQL Server Native Client 11.0]ログイン タイムアウトの期限が切れました (0); [08001] [Microsoft][SQL Server Native Client 11.0]ネットワークSQL Server への接続を確立中に、関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできません。インスタンス名が正しいかどうか、および SQL Server がリモート接続を許可するように構成されているかどうかを確認してください。詳細については、SQL Server Books Online を参照してください。 . (10060)')
接続文字列を使用した最初の方法:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("mssql+pyodbc://<username>:<password>@<server>/<database>?driver=SQL+Server+Native+Client+11.0")
query = "select * from table"
df=pd.read_sql(query,engine)
connectionString を使用した 2 番目の方法:
import pyodbc
server = 'xxx.database.windows.net'
database = 'database'
username = 'username'
password = 'password'
driver= '{SQL Server Native Client 11.0}'
with pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT TOP 3 name, collation_name FROM sys.databases")
row = cursor.fetchone()
while row:
print (str(row[0]) + " " + str(row[1]))
row = cursor.fetchone()
さらに、ドライバーを以下のドライバーに変更しようとしましたが、まだうまくいきません。
{ODBC Driver 11 for SQL Server}
{ODBC Driver 13 for SQL Server}
{ODBC Driver 17 for SQL Server}
{SQL Server Native Client 11.0}
興味深いのは、Azure VM ではないオンプレミスのマシン (例: ローカル マシンまたは RDP できる他のサーバー) から同じ接続文字列を使用して接続しようとすると、データベースにアクセスできることです。しかし、Azure VM マシンで試してみると、タイムアウトになります。この問題を解決する方法はありますか?
入力していただきありがとうございます。