Sql server 无法在中使用pymssql连接到SQL Server数据库,但可以使用tsql连接

Sql server 无法在中使用pymssql连接到SQL Server数据库,但可以使用tsql连接,sql-server,azure-sql-database,pymssql,Sql Server,Azure Sql Database,Pymssql,我正在尝试使用pymsql连接Azure中的数据库。我已经成功地连接到Azure中的其他数据库,但这一个似乎特别挑剔 以下是正在工作的T-SQL命令: tsql -p 1433 -S server.database.windows.net -P 'password' -U username@server -D database_name 以下是失败的pymsql连接调用: pymssql.connect(server='server.database.windows.net',

我正在尝试使用
pymsql
连接Azure中的数据库。我已经成功地连接到Azure中的其他数据库,但这一个似乎特别挑剔

以下是正在工作的T-SQL命令:

tsql -p 1433 -S server.database.windows.net -P 'password' -U username@server -D database_name
以下是失败的pymsql连接调用:

pymssql.connect(server='server.database.windows.net',
                port=1433,
                user='username@server',
                password='password',
                database='database_name')
以下是错误跟踪:

Traceback (most recent call last):
  File "pymssql.pyx", line 635, in pymssql.connect (pymssql.c:10734)
  File "_mssql.pyx", line 1902, in _mssql.connect (_mssql.c:21821)
  File "_mssql.pyx", line 637, in _mssql.MSSQLConnection.__init__ (_mssql.c:6581)
  File "_mssql.pyx", line 1630, in _mssql.maybe_raise_MSSQLDatabaseException (_mssql.c:17524)
_mssql.MSSQLDatabaseException: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "smallest.py", line 6, in <module>
    database='database_name')
  File "pymssql.pyx", line 641, in pymssql.connect (pymssql.c:10824)
pymssql.OperationalError: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n')
我相信上面提到的重要部分是:

login.c:466:登录数据包被拒绝

似乎表明凭据无效

感谢您的帮助

TDSDUMPCONFIG

log.c:196:Starting log file for FreeTDS 0.91 on 2018-03-23 18:31:34 with debug flags 0x4fff. config.c:185:Getting connection information for [server:1433]. config.c:189:Attempting to read conf files. config.c:354:... $FREETDSCONF not set. Trying $FREETDS/etc. config.c:367:... $FREETDS not set. Trying $HOME. config.c:293:Could not open '/home/ubuntu/.freetds.conf' ((.freetds.conf)). config.c:297:Found conf file '/etc/freetds/freetds.conf' (default). config.c:483:Looking for section global. config.c:540: Found section global. config.c:543:Got a match. config.c:565: tds version = '7.1' config.c:788:Setting tds version to 7.1 (0x701) from $TDSVER. config.c:565: text size = '64512' config.c:540: Found section egserver50. config.c:540: Found section egserver70. config.c:540: Found section server. config.c:554: Reached EOF config.c:483:Looking for section server:1433. config.c:540: Found section global. config.c:540: Found section egserver50. config.c:540: Found section egserver70. config.c:540: Found section server. config.c:554: Reached EOF config.c:303:[server:1433] not found. config.c:354:... $FREETDSCONF not set. Trying $FREETDS/etc. config.c:367:... $FREETDS not set. Trying $HOME. config.c:293:Could not open '/home/ubuntu/.freetds.conf' ((.freetds.conf)). config.c:297:Found conf file '/etc/freetds/freetds.conf' (default). config.c:483:Looking for section global. config.c:540: Found section global. config.c:543:Got a match. config.c:565: tds version = '7.1' config.c:788:Setting tds version to 7.1 (0x701) from $TDSVER. config.c:565: text size = '64512' config.c:540: Found section egserver50. config.c:540: Found section egserver70. config.c:540: Found section server. config.c:554: Reached EOF config.c:483:Looking for section server. config.c:540: Found section global. config.c:540: Found section egserver50. config.c:540: Found section egserver70. config.c:540: Found section server. config.c:543:Got a match. config.c:565: host = 'server.database.windows.net' config.c:595:Found host entry server.database.windows.net. config.c:599:IP addr is ser.ver.ip.add. config.c:565: port = '1433' config.c:565: tds version = '7.1' config.c:788:Setting tds version to 7.1 (0x701) from $TDSVER. config.c:554: Reached EOF config.c:301:Success: [server] defined in /etc/freetds/freetds.conf. config.c:714:Setting 'dump_file' to 'dump' from $TDSDUMP. config.c:650:tds_config_login: client_charset is UTF-8. config.c:655:tds_config_login: database_name is database_name. config.c:224:Final connection parameters: config.c:225: server_name = server:1433 config.c:226: server_host_name = server.database.windows.net config.c:227: ip_addr = ser.ver.ip.add config.c:228: instance_name = config.c:229: port = 1433 config.c:230: major_version = 7 config.c:231: minor_version = 1 config.c:232: block_size = 0 config.c:233: language = us_english config.c:234: server_charset = config.c:235: connect_timeout = 0 config.c:236: client_host_name = ubuntu-xenial config.c:237: client_charset = UTF-8 config.c:238: app_name = pymssql=2.1.3 config.c:239: user_name = config.c:242: library = DB-Library config.c:243: bulk_copy = 0 config.c:244: suppress_language = 0 config.c:245: encrypt level = 0 config.c:246: query_timeout = 0 config.c:249: database = database_name config.c:250: dump_file = dump config.c:251: debug_flags = 0 config.c:252: text_size = 64512 config.c:253: broken_dates = 0 config.c:254: emul_little_endian = 0 config.c:255: server_realm_name = 我的
tsql
设置:

$ tsql -C
Compile-time settings (established with the "configure" script)
                            Version: freetds v0.91
             freetds.conf directory: /etc/freetds
     MS db-lib source compatibility: no
        Sybase binary compatibility: yes
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 7.1
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: yes

请改用pyodbc

import pyodbc
server = 'your_server.database.windows.net'
database = 'your_database'
username = 'your_username'
password = 'your_password'
driver= '{ODBC Driver 13 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';PORT=1433;SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName FROM [SalesLT].[ProductCategory] pc JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid")
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

有关pyodbc的更多信息,请访问URL。

有解决此问题的方法吗?
$ tsql -C
Compile-time settings (established with the "configure" script)
                            Version: freetds v0.91
             freetds.conf directory: /etc/freetds
     MS db-lib source compatibility: no
        Sybase binary compatibility: yes
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 7.1
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: yes
import pyodbc
server = 'your_server.database.windows.net'
database = 'your_database'
username = 'your_username'
password = 'your_password'
driver= '{ODBC Driver 13 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';PORT=1433;SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName FROM [SalesLT].[ProductCategory] pc JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid")
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()