Проблема с подключением RobotFramework к базе данных с использованием пользовательских параметров

#sql-server #python-3.x #automation #robotframework #pyodbc

#sql-server #python-3.x #автоматизация #robotframework #pyodbc

Вопрос:

Получение ошибки OperationalError: (‘08001’, ‘[08001] [ Microsoft] [Драйвер ODBC SQL Server] [DBNETLIB] SQL Server не существует или доступ запрещен. (17) (SQLDriverConnect); [08001] [Microsoft][Драйвер ODBC SQL Server] [DBNETLIB]ConnectionOpen (Connect()). (53) ‘

     *** Settings ***
Documentation     Simple example using DBLibrary.
Library           SeleniumLibrary
Library           DatabaseLibrary 
*** Variables ***
${DBHost_ConnectionString}  'DRIVER={SQL Server};SERVER="hostname";UID="uname";PWD="******";DATABASE="dbname"'   

*** Test Cases ***

Connect Database
    Connect To Database Using Custom Params    pyodbc    ${DBHost_ConnectionString}
 

Я перепробовал все решения через Интернет, такие как добавление порта в строку подключения, добавление tcp перед именем сервера и т. Д.,
Следуя реализации, упомянутой в исходном коде dbapi
https://github.com/franz-see/Robotframework-Database-Library/blob/master/src/DatabaseLibrary/connection_manager.py

  elif dbapiModuleName in ["pyodbc", "pypyodbc"]:
            dbPort = dbPort or 1433
            logger.info('Connecting using : %s.connect(DRIVER={SQL Server};SERVER=%s,%s;DATABASE=%s;UID=%s;PWD=%s)' % (dbapiModuleName, dbHost, dbPort, dbName, dbUsername, dbPassword))
            self._dbconnection = db_api_2.connect('DRIVER={SQL Server};SERVER=%s,%s;DATABASE=%s;UID=%s;PWD=%s' % (dbHost, dbPort, dbName, dbUsername, dbPassword))
 

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

Ответ №1:

Как предполагаю, вам не следует заключать строку подключения в одинарные кавычки, поскольку они становятся частью строки подключения. Robot — это не python, а robot — это не оболочка, поэтому обычно вам не нужно заключать строки в кавычки.

 *** Variables ***
${DBHost_ConnectionString}  DRIVER={SQL Server};SERVER="hostname";UID="uname";PWD="******";DATABASE="dbname"
 

Неясно, используете ли вы буквально строку hostname и uname т. Д., Или это просто шаблон для целей вопроса. Вам необходимо передать фактическое имя хоста и фактическое имя пользователя и пароль.

Возможно, вам не понадобятся кавычки вокруг других значений, и в этом случае это будет выглядеть так:

 *** Variables ***
${DBHost_ConnectionString}  DRIVER={SQL Server};SERVER=hostname;UID=uname;PWD=******;DATABASE=dbname