Почему движок БД сервера SQL не соединяется с движком SQLAlchemy? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь подключиться к базе данных SQL-сервера на платформе python, используя SqlAlchemy. Я использую проверку подлинности Windows для подключения к моему серверу SQL. При подключении к серверу движок SqlAlchemy выдает ошибку:

Ниже приведен код, который я реализовал:

import os
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
import pyodbc


              Driver         Server Name    Instance        Database
DATABASE_URL='mssql+pyodbc://DESKTOP-N32LSOV\PRANAV/AdventureworksDW2016CTP3?trusted_connection=yes'
Engine = create_engine(DATABASE_URL)

cn = Engine.connect()

При запуске приведенного выше кода выдается эта ошибка:

Ошибка: sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft] [ODBC Driver Manager] Не найдено имя источника данных и не указан драйвер по умолчанию (0) (SQLDriverConnect)' ) (Справочная информация об этой ошибке: http://sqlalche.me/e/rvf5)

Я попытался использовать драйвер pymssql вместо драйвера pyodbc, но ошибка все еще сохраняется. Напротив, когда я пытаюсь подключиться с использованием приведенного ниже синтаксиса, он подключается. Я предполагаю, что мне не хватает какого-либо атрибута в URL-адресе mssql.

pyodbc.connect(r'Driver={SQL Server};Server=DESKTOP-N32LSOV\PRANAV;Database=master;Trusted_Connection=yes;')

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы должны указать, что вы хотите использовать ODBC и какой драйвер ODBC использовать.

engine = sqlalchemy.create_engine('mssql+pyodbc://localhost/Sandbox?driver=SQL+Server+Native+Client+11.0')

Если вы добавите часть driver= в URL базы данных, она должна работать.

0 голосов
/ 30 октября 2018

Если ничего не помогает, я бы попытался использовать аргумент creator для create_engine ( документация ):

def creator():
    return pyodbc.connect(r'Driver={SQL Server};Server=DESKTOP-N32LSOV\PRANAV;Database=master;Trusted_Connection=yes;')

Engine = create_engine('mssql://', creator=creator)

Использование creator= позволяет обойти все параметры подключения, указанные в URL-адресе, поэтому вы должны передавать информацию только для указания диалекта БД в URL-адресе.

Глядя на документацию диалекта / драйвера mssql+pyodbc , есть также опция ?odbc_connect:

import urllib.parse
CONNECTION_STRING = r'Driver={SQL Server};Server=DESKTOP-N32LSOV\PRANAV;Database=master;Trusted_Connection=yes;'
Engine = create_engine('mssql+pyodbc:///?odbc_connect=' + urllib.parse.quote_plus(CONNECTION_STRING))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...