无法从Windows上的Python连接到MSSQL Server

时间:2016-05-02 11:42:55

标签: python sql-server pymssql

我无法在Windows 10上从Python(3.4.4 64位)连接到SQL Server。这就是我所做的:

  1. 我找到了this漂亮的图书馆。
  2. 然后,我按了this页面并安装了 FreeTDS
  3. 之后我用这个命令安装了 pymssql easy_install pymssql
  4. 在SQL Server网络配置中,我为SQLEXPRESS实例启用了命名管道和TCP / IP
  5. 所以,此时我可以使用SQL Server Management Studio运行SQL Server并连接到我的数据库。当我登录时,我使用DESKTOP-1JA5E9F\SQLEXPRESS作为服务器名称,sa作为登录名,123作为密码。此外,在Python shell中,我可以导入pymssql,如:

    >>> import pymssql
    

    它不会引发任何错误。但是,我无法连接到我的数据库实例。我尝试了几十次尝试:

     conn = pymssql.connect(host=r'DESKTOP-1JA5E9F\SQLEXPRESS', 
                            user=r'sa', password=r'123', database=r'reestr')
    

    ^^^上面的代码永远不会完成(我看到shell中只闪烁_,这是永远闪烁的)。我也试过这个:

    conn = pymssql.connect(host=r'SQLEXPRESS', user=r'sa', password=r'123', database=r'reestr')
    

    这导致pymssql.InterfaceError: Connection to the database failed for an unknown reason.。我试过这个:

    conn=pymssql.connect(host=r'SQLEXPRESS:1433',user=r'sa',password=r'123', database=r'reestr')
    

    它也会导致相同的错误消息。所以,如果有人知道那些可以做到这一点的神奇伏都教法术,我们欢迎你。

1 个答案:

答案 0 :(得分:4)

根据docs,不再有host个关键字arg,而是server。它也应该是服务器名称,而不是实例名称,或者是完整的实例名称(带有服务器名称)。请参阅connect() descriptionexamples of name construction for Connection class

在您的情况下,服务器名称为DESKTOP-1JA5E9F.(local)也应该有效,因为您在本地计算机上执行了所有操作;您的命名实例名称为SQLEXPRESS

尝试这样:

import pymssql

#for instance with known name 'SQLEXPRESS'
conn = pymssql.connect(server=r'DESKTOP-1JA5E9F\SQLEXPRESS', 
                       user=r'sa', password=r'123', database=r'reestr')
#on localhost this should work too
conn = pymssql.connect(server=r'.\SQLEXPRESS', 
                       user=r'sa', password=r'123', database=r'reestr')

#for default instance with port taken from freetds.conf
#(this probably won't work for your case, because you use named instance
#instead of default instance, which is named MSSQLSERVER)
conn = pymssql.connect(server=r'DESKTOP-1JA5E9F', user=r'sa', password=r'123',    
                       database=r'reestr')

#for instance on known port '1433'
conn = pymssql.connect(server=r'DESKTOP-1JA5E9F:1433', user=r'sa', password=r'123',
                       database=r'reestr')

如果这不会有帮助,请使用tsql测试与described in the docs的关联,例如:

tsql -H DESKTOP-1JA5E9F -p 1433 -U sa -P 123 -D reestr

或者如果你有freetds.conf

tsql -S 'DESKTOP-1JA5E9F\SQLEXPRESS' -U sa -P 123 -D reestr