通过 Jupyter Lab 中的 SQL 魔法连接到 SQL 服务器

Connecting to SQL Server via SQL magics in Jupyter Lab

我正在尝试使用 SQL 魔法通过 Jupyter Labs 连接到我们的远程 sql 服务器数据库。我可以使用传统的连接字符串进行连接,但是 SQL 魔法似乎不起作用(这意味着我做错了什么)。下面是工作中的 pyodbc 连接:

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=Server;'
                      'Database=DB;'
                      'Trusted_Connection=yes;')

但是当我尝试连接 magics 时出现错误,提示未提供连接字符串

%load_ext sql
%sql engine = create_engine("mssql+pyodbc://user:password@server/db")

理想情况下,我想使用 DSN 连接 Magics(我也尝试过但没有成功):

%load_ext sql
%sql engine = create_engine("mssql+pyodbc://DSN;Trusted_Connection = Yes")

对建立连接有帮助吗?

在 Jupyter 单元中尝试这个:

import urllib
params = urllib.parse.quote_plus("DRIVER={SQL SERVER};SERVER=Server;DATABASE=DB;TRUSTED_CONNECTION=YES")
"mssql+pyodbc:///?odbc_connect=%s" % params

然后 运行 单元格和 copy/paste 从其计算返回到魔法中的编码字符串。

%%sql mssql+pyodbc:///?odbc_connect=DRIVER%3D%7BSQL+SERVER%7D%3BSERVER%3DServer%3BDATABASE%3DDB%3BTRUSTED_CONNECTION%3DYES
   [your SQL code here]

一种无需复制粘贴的编程方式是使用大括号:

connection_str = "DRIVER={SQL SERVER};SERVER=Server;DATABASE=DB;TRUSTED_CONNECTION=YES"
connection_str_quoted = urllib.parse.quote_plus(connection_str)
connection_uri = 'mssql+pyodbc:///?odbc_connect={}'.format(connection_str_quoted)

# this is how you would connect in sqlalchemy
import sqlalchemy
conn = sqlalchemy.create_engine(connection_uri)

%sql {connection_uri}