2013-04-01 2 views
8

Я пытаюсь подключиться к базе данных SQL Server 2012 с помощью SQLAlchemy (с pyobbc) на Python 3.3 (Windows 7-64-bit). Я могу подключиться с помощью прямого pyobbc, но не удалось подключиться с помощью SQLAlchemy. У меня есть настройка файла dsn для доступа к базе данных.Подключение к SQL Server 2012 с использованием sqlalchemy и pyodbc

Я успешно подключиться с помощью прямой pyodbc так:

con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn') 

Для SQLAlchemy я пробовал:

import sqlalchemy as sa 
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname') 

Метод create_engine фактически не установить соединение и успешно, но IIF Я пытаюсь что-то, что вызывает sqlalchemy для фактической настройки соединения (например, engine.table_names()), требуется некоторое время, но затем возвращает эту ошибку:

DBAPIError: (Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)') None None

Я не уверен, что происходит не так, как посмотреть, какая строка соединения действительно передается в pyodbc по sqlalchemy. Я успешно использую те же классы sqlalchemy с SQLite и MySQL.

Заранее благодарен!

ответ

21

Строка DSN на основе файлов интерпретируется SQLAlchemy как имя сервера = c, имя базы данных = users.

Я предпочитаю подключение без использования DSN, это еще одна задача настройки, с которой приходится иметь дело во время миграции кода.

Этот синтаксис работает с использованием проверки подлинности Windows:

engine = sa.create_engine('mssql+pyodbc://server/database') 

Или с SQL аутентификацией:

engine = sa.create_engine('mssql+pyodbc://user:[email protected]/database') 

SQLAlchemy имеет полное объяснение различных вариантов строки подключения here.

+2

Спасибо. Экземпляр SQL Server является единственным, который не находится на машине, над которой я работаю, поэтому я не был уверен, что здесь происходит что-то смешное. Просто чтобы немного расширить список укусов, которые вы указали (поскольку, по-видимому, названы экземпляры сервера SQL) - 'sa.create_engine ('mssql + pyodbc: // [машинное имя] \\ [имя_сервера]/[база данных]')' –

+1

Они не «Надо называть. На самом деле проще подключиться и использовать экземпляр сервера sql, настроенный как «экземпляр по умолчанию». Именованные экземпляры требуются, когда вы будете размещать несколько экземпляров сервера SQL Server на одном сервере. – marr75

6

У меня есть обновленная информация о подключении к MSSQL Server без использования DSN и с использованием проверки подлинности Windows. В моем примере у меня есть следующие параметры: Имя моего локального сервера - «(localdb) \ ProjectsV12». Имя локального сервера, которое я вижу из свойств базы данных (я использую Windows 10/Visual Studio 2015). Меня зовут дб «MainTest1»

engine = create_engine('mssql+pyodbc://(localdb)\ProjectsV12/MainTest1?driver=SQL+Server+Native+Client+11.0', echo=True) 

Это необходимо указать драйвер в связи. Вы можете найти свою версию клиента в:

control panel>Systems and Security>Administrative Tools.>ODBC Data Sources>System DSN tab>Add

Посмотрите на SQL версии Native клиента из списка.

+0

Это единственное, что сработало для меня. Большое спасибо! – Barka

Смежные вопросы