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

时间:2018-12-10 10:54:59

标签: python sql-server azure sqlalchemy

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

我的代码如下:

 kallisto_melt[,relative_abundance := value/(value[max(value)]*100), by = .(id)]

enter image description here

我收到以下消息:

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())

您的建议将不胜感激。

3 个答案:

答案 0 :(得分:4)

您的连接字符串有两个问题:

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

  2. 您也没有指定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())

测试结果: enter image description here

对于连接字符串,您可以通过以下方法获取它:azure门户->数据库->连接字符串(在这种情况下,请选择ODBC): enter image description here

答案 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