环境:
Docker镜像:python:2.7.14-stretch(这意味着Debian 9作为底层操作系统)
Debian 9的安装SQL Server ODBC驱动程序(https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017)
使用pyodbc模块
使用AAD身份验证连接到Azure SQL Server。
问题:
与DB的第一次连接完全正常。但是,与同一个DB或其他DB的任何下一个连接都会失败,并显示以下错误:
例外:::('08001',你'[08001] [unixODBC] [微软] [ODBC驱动程序17 for SQL Server] SSL Provider: [错误:140A90F1:lib(20):func(169):reason(241)]( - 1) (的SQLDriverConnect)') 无法连接到数据库
请注意,仅在使用AAD自动更新模式时才会出现此问题。如果我使用简单的sql server用户,一切运行正常。
以下是示例代码段。
db_list = [TEST_DB1, TEST_DB2]
sql_conn = None
for db in db_list:
try:
conn_string = 'DRIVER={ODBC Driver 17 for SQL Server};' \
'SERVER=' + <db_url> + \
';DATABASE=' + <db_name> + \
';UID=' + <db_username> + \
';PWD=' + <db_password> + \
';Authentication=ActiveDirectoryPassword'
print conn_string
sql_conn = pyodbc.connect(conn_string)
except Exception as e:
print "Exception:::", e
print 'Cannot connect to DB' + str(sys.exc_info()[0])
return None
sql_conn.cursor().execute(<some SQL Query>)
sql_conn.close()