我有一个MS SQL数据库的Select访问权限,我想将数据提取到运行在Jupyter笔记本中的Pandas数据框架中。由于我无法控制的原因,我可以从另一个用户访问数据库。如何从Jupyter查询数据库,同时连接到我当前的用户帐户?
你可以这样做:
- Python需要为所有计算机用户安装。
- 安装Visual c++构建工具Microsoft c++ Build Tools - Visual Studio
- 为计算机中所有用户都可以访问的虚拟环境创建一个目录,例如:
mkdir C:virtualenv
- 复制命令提示符并粘贴到virtualenv目录。
From: C:UsersYOURUSERNAMEAppDataRoamingMicrosoftWindowsStart MenuProgramsSystem ToolsCommand Prompt
To: C:virtualenvCommand Prompt
- 以不同用户运行命令提示符(按shift +右键)并登录YOURDOMAIN。
username: YOURUSERNAME@YOURDOMAIN or YOURDOMAINYOURUSERNAME password: your password
cd C:virtualenv
创建虚拟环境:- 连接虚拟环境。
scriptsactivate
- 安装依赖关系
pip install --upgrade jupyter pyodbc sqlalchemy pandas pip
- 为用户创建Jupyter配置文件。
jupyter notebook --generate-config
关闭命令提示符右键单击命令提示符快捷方式,然后选择属性。 - 清除并留空Start in中的值,并将目标值替换为:
Target: %windir%system32runas.exe /user:YOURUSERNAME@YOURDOMAIN “CMD /k "cd C:virtualenv && Scriptsactivate && jupyter notebook”"
**可选:您可以添加/saved(在/user之后),它会记住密码。出于安全原因,您不应该这样做。 - 双击命令提示符运行Jupyter。
python -m venv .
创建一个笔记本连接到SQL数据库,并将表下载到Pandas数据框架中。
import os
import pyodbc
import sqlalchemy as db
import pandas as pd
windomain = os.environ["userdomain"]
if windomain == "YOURDOMAIN":
server = "YOURSERVER"
database = "YOUDATABASE"
driver = "{SQL Server}"
connect = "DRIVER="+driver+";SERVER="+
server+";DATABASE="+database+
";Trusted_Connection=yes"
engine = db.create_engine(
"mssql+pyodbc:///?odbc_connect={}".format(connect))
else:
print("Open as different user.")
df = pd.read_sql(
"""
SELECT TOP(100) *
FROM [YOURDATABASE]
""",
con=engine,
)