Python 2.7 如何在不更改用户名的情况下,在pymssql中解决名称太长而无法登录的问题

Python 2.7 如何在不更改用户名的情况下,在pymssql中解决名称太长而无法登录的问题,python-2.7,freetds,pymssql,Python 2.7,Freetds,Pymssql,我正在尝试使用pymssql连接到客户机的数据库,但迄今为止未能成功。我认为问题的根源在于TDSDUMP堆栈跟踪中的以下条目: dblib.c:761:dbsetlname(0x1ac3e10,@.database.windows.net,2) dblib.c:7929:dbperror((nil),20042,0) dblib.c:7981:20042:“名称对于LOGINREC字段太长” 一个问题是.database.windows.net已经超过了字符串限制(根据下面的:,它似乎是30

我正在尝试使用pymssql连接到客户机的数据库,但迄今为止未能成功。我认为问题的根源在于TDSDUMP堆栈跟踪中的以下条目:


dblib.c:761:dbsetlname(0x1ac3e10,@.database.windows.net,2)
dblib.c:7929:dbperror((nil),20042,0)
dblib.c:7981:20042:“名称对于LOGINREC字段太长”

一个问题是
.database.windows.net
已经超过了字符串限制(根据下面的:,它似乎是30)

我还试图排除用户名条目中的
@.database.windows.net
部分,但收到以下错误:


msgno 40532:“无法打开登录请求的服务器“1433D”。登录失败。”

根据
@
部分由服务器请求

因此,在这一点上,我尝试做以下工作:

user = username + "@{}".format(server)
user = user[:30]
我收到了以下信息(这是一个轻微的改进,但仍然不理想,因为我仍然无法建立连接):


无法打开登录请求的服务器“”。登录失败

如果可能的话,我更愿意将一些参数传递给pymssql的connect方法,该方法将覆盖此字符限制,或者在只调用
而不调用
@
部分的dbsetlname之后,将服务器附加到后端的用户名。是否有人有任何建议(同样,首选是不要要求客户端更改我们的用户名,但我们可能不得不求助于此,或者如果没有其他选项,则尝试使用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
)
conn=pymssql.connect(
主机=主机,
数据库=数据库,
用户=用户名,
密码=密码,
port=int(port)#这是1433
)
conn=pymssql.connect(
主机=主机,
数据库=数据库,
user=username+'@{}'。格式(服务器名),
密码=密码,
port=int(port)#这是1433
)
conn=pymssql.connect(
服务器=.database.windows.net,
数据库=数据库,
用户=用户名,
密码=密码,
port=int(port)#这是1433
)

提前感谢您提供的任何帮助/建议

您可能可以使用另一种连接字符串的方法

如果您使用的是SQL Server Auth,请尝试以下操作:

conn = pymssql.connect(
    server="<servername>.database.windows.net",
    port=1433,
    user="username",
    password="password",
    database="dbname"
)
conn=pymssql.connect(
server=“.database.windows.net”,
端口=1433,
user=“username”,
password=“password”,
database=“dbname”
)
如果您使用的是Windows身份验证:

conn = pymssql.connect(
    server="<servername>.database.windows.net",
    port=1433,
    user="DOMAIN\USERNAME",
    password="password",
    database="dbname"
)
conn=pymssql.connect(
server=“.database.windows.net”,
端口=1433,
user=“域\用户名”,
password=“password”,
database=“dbname”
)

您尝试过这两种连接方法中的任何一种吗?

您可能可以使用另一种连接字符串方法

如果您使用的是SQL Server Auth,请尝试以下操作:

conn = pymssql.connect(
    server="<servername>.database.windows.net",
    port=1433,
    user="username",
    password="password",
    database="dbname"
)
conn=pymssql.connect(
server=“.database.windows.net”,
端口=1433,
user=“username”,
password=“password”,
database=“dbname”
)
如果您使用的是Windows身份验证:

conn = pymssql.connect(
    server="<servername>.database.windows.net",
    port=1433,
    user="DOMAIN\USERNAME",
    password="password",
    database="dbname"
)
conn=pymssql.connect(
server=“.database.windows.net”,
端口=1433,
user=“域\用户名”,
password=“password”,
database=“dbname”
)

您尝试过这两种连接方法中的任何一种吗?

您是否可以包括用于连接的
pymssql.connect()
方法?根据请求添加!嗯,我从来没有见过SQL Server需要这个。我不确定您是否需要特定于SQL Server的东西;也许可以尝试使用带有FreeTDS的pyodbc,而不是带有FreeTDS的pymssql?这就是我使用的堆栈,现在微软正式支持它。“pymssql会施加长度限制似乎很奇怪”-这可能是因为pymssql使用特定的API来处理FreeTDS。根据微软的博客文章,他们将支持pyodbc和django pyodbc azure,并使用SQL Server。我仍然将FreeTDS与pyodbc结合使用,并且它的性能非常好。您是否可以包括用于连接的
pymssql.connect()
方法?按要求添加!嗯,我从来没有见过SQL Server需要这个。我不确定您是否需要特定于SQL Server的东西;也许可以尝试使用带有FreeTDS的pyodbc,而不是带有FreeTDS的pymssql?这就是我使用的堆栈,现在微软正式支持它。“pymssql会施加长度限制似乎很奇怪”-这可能是因为pymssql使用特定的API来处理FreeTDS。根据微软的博客文章,他们将支持pyodbc和django pyodbc azure,并使用SQL Server。我仍然将FreeTDS与pyodbc结合使用,它的性能非常好。嘿,我很感激这个建议,但实际上我在提交这个问题后不久就已经尝试过了。不幸的是,它仍然返回了1433D。嘿,我很感激这个建议,但实际上我在提交这个问题后不久就已经尝试过了。不幸的是,它仍然返回1433天。