我正在尝试使用Python中的SQLAlchemy连接到Azure数据库。
我的代码如下:
kallisto_melt[,relative_abundance := value/(value[max(value)]*100), by = .(id)]
我收到以下消息:
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())
您的建议将不胜感激。
答案 0 :(得分:4)
您的连接字符串有两个问题:
根据SQLAlchemy documentation:The delimeters must be URL escaped
,使用传递的精确pyodbc字符串时。
您也没有指定sql驱动程序名称。
您可以使用下面的代码,该代码对我而言效果很好:
import pyodbc
from sqlalchemy import create_engine
import urllib
params = urllib.quote_plus \ # urllib.parse.quote_plus for python 3
(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())
答案 1 :(得分:3)
这是我在Python3中使用的:
params = urllib.parse.quote_plus(
'Driver=%s;' % driver +
'Server=tcp:%s,1433;' % server +
'Database=%s;' % database +
'Uid=%s;' % username +
'Pwd={%s};' % password +
'Encrypt=yes;' +
'TrustServerCertificate=no;' +
'Connection Timeout=30;')
conn_str = 'mssql+pyodbc:///?odbc_connect=' + params
engine = create_engine(conn_str)
答案 2 :(得分:0)
ODBC Driver 17 for SQL Server
中使用的Python3代码段。花了我一些时间才能解决所有问题,尤其是驱动程序版本和参数。
import urllib
from sqlalchemy import create_engine
driver = "{ODBC Driver 17 for SQL Server}"
server = "<server-name>.database.windows.net"
database = "<db-name>"
user = "<db-user>"
password = "<db-password>"
conn = f"""Driver={driver};Server=tcp:{server},1433;Database={database};
Uid={user};Pwd={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;"""
params = urllib.parse.quote_plus(conn)
conn_str = 'mssql+pyodbc:///?autocommit=true&odbc_connect={}'.format(params)
engine = create_engine(conn_str, echo=True)
engine.execute("SELECT 1")
此外,我需要在macOS上安装以下驱动程序/工具:
brew install msodbcsql17 mssql-tools