pypyodbc соединяется с явной строкой, но не с переменной

Я читаю строку подключения к базе данных SQL Server от пользователя, представленного здесь randomstring. Когда я вывожу случайную строку в консоль, она выглядит идеально сформированной, и я просматривал ее десятки раз, чтобы проверить. Однако соединение не удается с

pypyodbc.Error: ('IM002', '[IM002] [Майкрософт]

Если я явно передам точно такую ​​же строку курсору, соединение будет работать нормально. Нужно ли мне делать что-то конкретное со строковой переменной, чтобы иметь возможность ее использовать?

    randomstring = ShowConnString(self.cframe).connstringtext
    print(randomstring)
    self.conn = pypyodbc.connect(randomstring)
    #self.conn = pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password')

Редактировать: вывод на печать (случайная строка):

pypyodbc.connect (драйвер = '{SQL Server}', сервер = '(локальный)', база данных = 'Аудит', uid = 'sa', pwd = 'пароль')


person pickarooney    schedule 02.03.2017    source источник
comment
Пожалуйста, отредактируйте свой вопрос, чтобы точно показать, что появляется в консоли, когда вы print(randomstring).   -  person Gord Thompson    schedule 02.03.2017


Ответы (1)


Первое, что нужно отметить, это то, что ваш второй (закомментированный) пример не соединяется с «явной строкой [соединения]», он использует серию аргументов ключевого слова («kwargs») для указания driver , server и т.д.. Обратите внимание на тонкую разницу между формой аргументов ключевого слова ...

self.conn = pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password')

... и форма строки подключения:

self.conn = pypyodbc.connect('driver={SQL Server};server=(local);database=Audit;uid=sa;pwd=password')

Теперь, если ваша переменная randomstring действительно содержит

pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password')

тогда это определенно недопустимая строка подключения ODBC. Даже если он просто содержал

driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password'

это все равно не будет допустимой строкой подключения, потому что элементы разделены запятыми (а не точками с запятой), а значения заключены в кавычки. Вам нужно будет преобразовать содержимое вашего значения randomstring в правильную строку подключения ODBC, прежде чем передать его методу .connect.

person Gord Thompson    schedule 03.03.2017
comment
randomstring теперь выводит driver={SQL Server};server=(local);database=Audit;uid=sa;pwd=password, но я все еще получаю ту же ошибку с self.conn - pypyodbc.connect(randomstring), но с следующий явный вызов работает: self.conn = pypyodbc.connect('driver={SQL Server};server=(local);database=GermanAudit;uid=sa;pwd=_PWD4sa_') я не понимаю - person pickarooney; 03.03.2017
comment
На самом деле, я думаю, что значение текстового поля возвращается с символом новой строки перед ним, когда я вывожу его на консоль, оно находится на одну строку ниже верхней части экрана консоли. - person pickarooney; 03.03.2017