LoginSignup
0
0

More than 5 years have passed since last update.

InterfaceError:MacからSQL Serverへ急に接続できなくなったときのこと

Last updated at Posted at 2018-09-22

MacからDockerに作ってあるSQL Serverへのpython使っての接続が急にできなくなってしまったので、その時の解決策をメモしておく。

環境前提

ぶち当たったこと

jupyter notebookからSQL Serverにつなぎに行こうと下記コード実行。

jupyterのコード.ipynb
import sqlalchemy
import pyodbc
engine = sqlalchemy.create_engine("mssql+pyodbc://ユーザ名:パスワード@データソース名(DSN)")
connection = engine.connect()

したら下記エラーメッセージが出現。

エラーメッセージ
InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') (Background on this error at: http://sqlalche.me/e/rvf5)

調査

なんもいじってないのになーと思いながらターミナルからodbcinst -jで見ているiniファイルとかを確認する。

$ odbcinst -j
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /Users/Macのユーザ名/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

odbc.iniファイルにDSNが定義されているはずなので、中身を見ようと、less /etc/odbc.iniしてもそんなファイルないよと怒られる。。。

絶対どっかにあるだろーと思いfind / -name odbc.iniで探す。

$ find / -name odbc.ini
/usr/local/etc/odbc.ini

中身を確認

$ less /usr/local/etc/odbc.ini

[データソース名]
Driver=FreeTDS
Server=localhost
Port=1433
Database=データベース名

とても見覚えのあるデータソース名で定義があった。(juypter notebbokで使っているデータソース名)
これを上記のSYSTEM DATA SOURCESに放り込めばいいんじゃね?

解決策

無邪気に/etcにコピー。/etcにはodbcinst.iniもなかったのでついでにそれもコピー

$ cp /usr/local/etc/odbc.ini /etc/odbc.ini
$ cp /usr/local/etc/odbcinst.ini /etc/odbcinst.ini

再度juypter notebookから接続確認して見たら、InterfaceErrorも出現せず、無事接続できました。
原因は不明だけど、めでたしめでたし。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0