Подтвердить что ты не робот

SQLAlchemy не может подключиться к базе данных mssql

Вот мой простой тест script. Просто пытаюсь сделать базовый оператор select. Найденные основные биты в учебнике.

from sqlalchemy import *

db = create_engine('mssql+pyodbc://user:[email protected]_address/database_name')    

db.echo = True 
metadata = MetaData(db)

users = Table('member', metadata, autoload=True)

def run(stmt):
    rs = stmt.execute()
    for row in rs:
        print row

s = users.select(users.c.fname == 'Bill')
run(s)

После часа поиска и поиска нескольких решений, я не ближе к его решению, чем когда я начал. Надеюсь, я только что сделал простую ошибку, но я не могу ее найти...

Здесь ошибка, которую я получаю

sqlalchemy.exc.DBAPIError: (Error) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') None None

Любая помощь будет очень признательна!

4b9b3361

Ответ 1

Если URL не указан, драйвером по умолчанию для диалога mssql+pyodbc будет "SQL Server" [1]. Это означает, что вам нужно иметь раздел, который читается следующим образом:/etc/unixODBC/odbcinst.ini:

[SQL Server]
Driver=/path/to/library.so

Он работает "автоматически" в Windows, потому что если вы откроете "Инструменты администратора" → "Источники данных" (ODBC), скорее всего, вы найдете запись под названием "SQL Server" на вкладке "Драйверы".

В Linux вы можете либо использовать драйвер FreeTDS, либо официальный драйвер от Microsoft (я рекомендую это).

После установки драйвера вы должны иметь что-то подобное в файле /etc/unixODBC/odbcinst.ini:

[FreeTDS]
Driver=/usr/lib/libtdsodbc.so
Threading=1

[ODBC Driver 11 for SQL Server]
Description=Microsoft ODBC Driver 11 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0
Threading=1
UsageCount=1

Затем вам просто нужно добавить параметр строки запроса driver к URL-адресу, со значением, которое соответствует имени раздела.

Пример URL с FreeTDS:

mssql+pyodbc://user:[email protected]_address/database_name?driver=FreeTDS

Пример URL-адреса с официальным драйвером:

mssql+pyodbc://user:[email protected]_address/database_name?driver=ODBC+Driver+11+for+SQL+Server

[1] https://bitbucket.org/sqlalchemy/sqlalchemy/src/aa3a8f016f3e4396d125b18b0510abdf72aa8af2/lib/sqlalchemy/dialects/mssql/pyodbc.py?at=default#cl-236

Ответ 2

Ошибка, которую вы получаете, может указывать на отсутствие установки DSN с именем IM002. Пробовали ли вы тестирование соединения ODBC напрямую, чтобы проверить правильность его настройки? У вас установлены соответствующие драйверы базы данных Microsoft SQL Server?