
前提
pyhtonを実行するサーバーとSQL Serverを搭載しているサーバーは別に設置しています。この2つはともにWindows Server 2016です。
python実行サーバー ⇒ Aサーバー
SQL Server搭載サーバー ⇒ Bサーバー
該当のソースコード
Aサーバーのpythonプログラムから、BサーバーにあるSQL Serverのテーブルにデータを格納するコードを書いています。
以下はpythonプログラム(SQLACCESS.py)のコードです。
import pyodbc import pandas as pd import settings import pymssql import csv from sqlalchemy import create_engine # インスタンス instance = "インスタンス名" # ユーザー user = "ユーザー名" # パスワード pasword = "パスワード" # ポート port = "ポート番号" #データベース database = "データベース名" #CSVファイルパス file = "C:\\Users\\***\\***\\***\\access_test.csv" #テーブル名 table = "テーブル名" # DB接続 connection = ( 'DRIVER={SQL Server};SERVER='+instance + ';DATABASE='+database+';UID='+user+';PWD='+ pasword + ';' ) con = pyodbc.connect(connection, autocommit=True) cursor = con.cursor() #CSVを読み込み、データフレーム化 csv = pd.read_csv(file, encoding='utf-8-sig') df = pd.DataFrame(csv) #テーブルに格納されているデータを全て削除 cursor.execute("TRUNCATE TABLE " + table) con.commit() #データフレームのままSQLServerに格納する engine = create_engine(f"mssql+pymssql://{user}:{pasword}@{instance}/{database}") df.to_sql('Access_test', con = engine, if_exists='replace', index=None) con.commit() # DB切断 cursor.close() con.close()
発生している問題・エラーメッセージ
以下のエラーが表示され、データ格納できませんでした。
接続情報に間違いはございません。
エラーメッセージ Traceback (most recent call last): File "c:\Users\***\***\***\SQLACCESS.py", line 38, in <module> con = pyodbc.connect(connection, autocommit=True) pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server が存在しないか、アクセスが拒否されました。 (17) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')
質問
pyhton実行サーバー(Aサーバー)のpythonプログラムから、SQL Server搭載サーバー(Bサーバー)にあるSQL Serverのテーブルにデータを格納するためにはどうしたらよいでしょうか。一方、pythonプログラムをクライアントPCから実行すると、格納できることは確認しています。






回答2件
あなたの回答
tips
プレビュー