【Python】pyodbcでOperationalError:'08001'が発生した際に確認すること
PythonでSQLServerに接続する際、pyodbcを利用する方法があります。
Python超初心者の自分は、各設定内容を共通ファイル(config.ini)から取得し
pyodbc.connectで下記エラーを発生させたので、二度と同じ過ちを繰り返さぬよう記録します。
【エラー内容】
pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server が存在しないか、アクセスが拒否されました。 (17) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (xxx)')
【前提条件】
各設定内容は共通ファイル(config.ini)から取得する。
def db_connect(sect): # config.ini取得 configifile = (r"config.ini") config_ini = configparser.ConfigParser() config_ini.read(configifile, encoding="utf-8") # 各設定値指定 instance = config_ini[sect]["instance"] db = config_ini[sect]["db"] user = config_ini[sect]["user"] pasword = config_ini[sect]["pasword"] # SQLServer接続 connection = "DRIVER={SQL Server}" + ";"\ "SERVER=" + instance + ";"\ "DATABASE=" + db + ";"\ "uid=" + user + ";" \ "pwd=" + pasword print(connection) return pyodbc.connect(connection) con = db_connect("DB") sql = "select * from TEST" df = pandas.read_sql(sql, con) print(df)
[DB] instance = "xxxx\xxxx" user = "xxxx" pasword = "xxxx" db = "xxxx"
【解決方法】
config.iniの設定値からダブルクォーテーションを削除する
[DB] instance = xxxx\xxxx user = xxxx pasword = xxxx db = xxxx
config.iniから値を取得した場合にダブルクォーテーションごと設定されるとは思いませんでした。
このような誤りをするのは自分くらいだと思いますが、困っている人もいると思いますのでメモします。