使用Python中的SQLAlchemy连接到Azure数据库

我正在尝试使用Python中的SQLAlchemy连接到Azure数据库 .

我的代码如下:

engine_azure = \
create_engine('mssql+pyodbc://{Server admin login}:{password}@{Server name}.database.windows.net:1433/{AdventureWorksLT}', echo=True)

我收到以下消息:

C:\ProgramData\Anaconda3\lib\site-packages\sqlalchemy\connectors\pyodbc.py:92: SAWarning: No driver name specified; this is expected by PyODBC when using DSN-less connections
  "No driver name specified; "

然后我运行以下代码:

print(engine_azure.table_names())

我收到以下消息:

DBAPIError: (pyodbc.Error) ('01S00', '[01S00] [Microsoft][ODBC Driver Manager] Invalid connection string attribute (0) (SQLDriverConnect)')

您的建议将不胜感激 .

回答(1)

2 years ago

连接字符串有2个问题:

  • 根据SQLAlchemy documentationThe delimeters must be URL escaped 使用传递精确pyodbc字符串时 .

  • 并且您也没有指定sql驱动程序名称 .

你可以使用下面的代码,这在我身边很好用:

import pyodbc
from sqlalchemy import create_engine
import urllib

params = urllib.quote_plus \
(r'Driver={ODBC Driver 13 for SQL Server};Server=tcp:yourDBServerName.database.windows.net,1433;Database=dbname;Uid=username@dbserverName;Pwd=xxx;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;')
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine_azure = create_engine(conn_str,echo=True)

print('connection is ok')
print(engine_azure.table_names())

测试结果:

对于连接字符串,您可以通过访问azure portal - >您的数据库 - >连接字符串(在这种情况下选择ODBC)来获取它: