Я пытаюсь использовать pymssql для подключения к клиентской базе данных, но до сих пор не смог добиться успеха. Я считаю, что корень проблемы заключается в этой записи в трассировке стека моего TDSDUMP:
dblib.c:761:dbsetlname(0x1ac3e10, <username>@<servername>.database.windows.net, 2)
dblib.c:7929:dbperror((nil), 20042, 0)
dblib.c:7981:20042: "Name too long for LOGINREC field"
Одна проблема заключается в том, что <servername>.database.windows.net
уже превышает ограничение строки (которое, согласно этому, кажется равным 30: Как использовать драйвер PHP dblib PDO с длинными именами пользователей? / SQLSTATE[HY000] Имя слишком длинное для поля LOGINREC (уровень важности 2).
Я также попытался исключить часть @<servername>.database.windows.net
в записи имени пользователя только для получения следующей ошибки:
msgno 40532: "Cannot open server "1433D" requested by the login. The login failed."
Согласно https://github.com/pymssql/pymssql/issues/330 @<servername>
часть запрашивается сервером.
Итак, в этот момент я попытался сделать следующее:
user = username + "@{}".format(server)
user = user[:30]
И я получил следующую информацию (что было небольшим улучшением, но все же не идеальным, учитывая, что я все еще не мог установить соединение):
"Cannot open server "<server_name minus the last 6 characters>" requested by the login. The login failed."
Если возможно, я бы предпочел передать какой-либо параметр методу подключения pymssql, который переопределит это ограничение на количество символов или сделает что-то, чтобы добавить сервер к имени пользователя на бэкэнде после вызова dbsetlname только для <username>
без части @<servername>
. Есть ли у кого-нибудь какие-либо рекомендации (опять же предпочтение состоит в том, чтобы не просить клиента изменить наше имя пользователя, но нам, возможно, придется прибегнуть к этому или попытаться использовать pyodbc, если нет другого варианта).
Вот несколько способов подключения, которые я пробовал:
conn = pymssql.connect(
host=host,
database=database,
user=username,
password=password,
port=int(port) # this is 1433
)
conn = pymssql.connect(
host=host,
database=database,
user=username + '@{}'.format(servername),
password=password,
port=int(port) # this is 1433
)
conn = pymssql.connect(
server=<servername>.database.windows.net,
database=database,
user=username,
password=password,
port=int(port) # this is 1433
)
Заранее спасибо за любую помощь/совет, который вы можете предложить!
pymssql.connect()
, который вы используете для подключения? - person FlipperPA   schedule 07.03.2017