将预连接参数中的 Azure SQL DB 的 Azure AD 令牌传递给 SQLAlchemy create_engine()

2023-11-29

我想要通过 SQLAlchemy 使用 AD 令牌连接到 Azure SQL DB。

我已经关注了https://github.com/felipefandrade/azuresqlspn并且可以通过此方法成功连接。但是,我想扩展它并使用 SQLAlchemy 来管理连接。

from os import environ
import struct
import adal
from sqlalchemy import create_engine
import pyodbc

clientSecret = environ.get('clientSecret')
clientID = environ.get('clientID')
tenantID =  environ.get('tenantID')
authorityHostUrl = "https://login.microsoftonline.com"
authority_url = authorityHostUrl + '/' + tenantID
resource = "https://database.windows.net/"
context = adal.AuthenticationContext(authority_url, api_version=None)

token = context.acquire_token_with_client_credentials(
    resource,
    clientID,
    clientSecret)


tokenb = bytes(token["accessToken"], "UTF-8")
exptoken = b''

for i in tokenb:
    exptoken += bytes({i})
    exptoken += bytes(1)

tokenstruct = struct.pack("=i", len(exptoken)) + exptoken

driver = "Driver={ODBC Driver 17 for SQL Server}"
server = ";SERVER={0}".format(environ.get('server'))
database = ";DATABASE={0}".format(environ.get('database'))

connString = driver + server + database

SQL_COPT_SS_ACCESS_TOKEN = 1256
conn = pyodbc.connect(connString, attrs_before={SQL_COPT_SS_ACCESS_TOKEN:tokenstruct})

cursor = conn.cursor()
cursor.execute("SELECT TOP 20 ID, Name FROM [Table1]")
row = cursor.fetchone()
print("######")
print("Using pyodbc directly - This works")
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

print("#####")
print("Connecting via sqlalchemy - This doesn't work")
SAconnString = "mssql+pyodbc://<server>.database.windows.net/<database>?driver=ODBC+Driver+17+for+SQL+Server"
db = create_engine(SAconnString, connect_args={'attrs_before': {SQL_COPT_SS_ACCESS_TOKEN:tokenstruct}})

SAconn = db.connect()
result = SAconn.execute("SELECT TOP 20 ID, Name FROM [Table1]")
for row in result:
    print(row['ID'] + " " + row['Name'])

如代码中所述,使用pyodbc.connect()方法会起作用。但是,使用 SQLAlchemy 我收到错误FA005] [Microsoft][ODBC Driver 17 for SQL Server]Cannot use Access Token with any of the following options: Authentication, Integrated Security, User, Password。在我看来connect_args选项正在传递令牌,但也有其他选项。如何让 SQLAlchemy 将 AD 令牌正确传递给 pyodbc?


需要显式发送 PyODBC 连接字符串urllib.

connString = driver + server + database
params = urllib.parse.quote(connString)
db = create_engine("mssql+pyodbc:///?odbc_connect={0}".format(params), connect_args={'attrs_before': {SQL_COPT_SS_ACCESS_TOKEN:tokenstruct}})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将预连接参数中的 Azure SQL DB 的 Azure AD 令牌传递给 SQLAlchemy create_engine() 的相关文章

  • 将 JSON 发布到 Python CGI

    我已经安装了 Apache2 并且 Python 可以工作 但我有一个问题 我有两页 一个是 Python 页面 另一个是带有 JQuery 的 Html 页面 有人可以告诉我如何让我的 ajax 帖子正常工作吗
  • 如何(重新)命名 pandas 数据框中的空列标题而不导出到 csv

    我有一个熊猫数据框df1带有一个索引列和一系列未命名的值 我想为未命名的系列指定一个名称 到目前为止 我知道的唯一方法是导出到df1 csv using df1 to csv df1 csv header Signal 然后使用以下命令重新
  • 如何使用一个模型中间层的输出作为另一个模型的输入?

    我训练一个模型A并尝试使用中间层的输出name layer x 作为模型的附加输入B 我尝试像 Keras 文档一样使用中间层的输出https keras io getting started faq how can i obtain th
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • Keras model.predict 函数给出输入形状错误

    我已经在 Tensorflow 中实现了通用句子编码器 现在我正在尝试预测句子的类概率 我也将字符串转换为数组 Code if model model type universal classifier basic class probs
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 将 Python Pandas DataFrame 写入 Word 文档

    我正在努力创建一个使用 Pandas DataFrames 的 Python 生成的报告 目前我正在使用DataFrame to string 方法 但是 这会作为字符串写入文件 有没有办法让我实现这一目标 同时将其保留为表格 以便我可以使
  • 无法在 virtualenv 中安装 libxml2

    我有一个问题libxml2蟒蛇模块 我正在尝试将其安装在python3 虚拟环境使用以下命令 pip install libxml2 python3 但它显示以下错误 Collecting libxml2 python3 Using cac
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • Django 多对多关系(类别)

    我的目标是向我的 Post 模型添加类别 我希望以后能够按不同类别 有时是多个类别 查询所有帖子 模型 py class Category models Model categories 1 red 2 blue 3 black title
  • 查找与另一列 Pandas 中的唯一值关联的列中的值的交集

    如果我有一个像这样的数据框 非常小的例子 col1 col2 0 a 1 1 a 2 2 b 1 3 b 2 4 b 4 5 c 1 6 c 2 7 c 3 我想要所有的交集col2当价值观与其独特性相关时col1值 因此在这种情况下 交集
  • 数据框中 .map(str) 和 .astype(str) 有什么区别

    我有一个数据框 其列名为 col1 和 col2 的整数类型条目 我想将 col1 和 col2 的条目以及其间的 点 连接起来 我搜索并发现添加两个列条目 df col df col1 map str df col2 map str 并添
  • Python-验证我的文档 xls 中是否存在工作表

    我正在尝试在空闲时间设计一个小程序 加载 xls 文件 然后在要扫描的文档中选择一张纸 步骤1 用户导入 xls文件 导入程序后检查文件是否存在 我能做到的 第 2 步 我要求用户提供要分析的文档表 xls 的名称 这就是它停止的地方 该程
  • 如何获取分类数据的分组条形图

    I have a big dataset with information about students And I have to build a graph of dependencies between different value
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • 如何在matplotlib中调整x轴

    I have a graph like this x轴上的数据表示小时 所以我希望x轴设置为0 24 48 72 而不是现在的值 很难看到 0 100 之间的数据 fig1 plt figure ax fig1 add subplot 11
  • 是否可以使用 Anaconda 包作为 Google Cloud Functions 的依赖项?

    我正在使用 Python 运行时编写 Google Cloud Function 我需要包含一些无法使用的依赖项pip 如文档中所述here https cloud google com functions docs writing spe
  • Python:如何在不先创建整个列表的情况下计算列表的总和?

    通常我们必须 1 声明一个列表 2 使用以下方法计算该列表的总和sum 但现在我希望指定一个以 1 开头 间隔为 4 100 个元素的列表 如下所示 1 5 9 13 17 21 25 29 33 37 我不想涉及数学公式 所以 1 如何在
  • python中有没有一种方法可以将存储在列表中的正则表达式模式列表应用到单个字符串?

    我有一个正则表达式模式列表 存储在列表类型中 我想将其应用于字符串 有谁知道一个好方法 将列表中的每个正则表达式模式应用于字符串 和 如果匹配 则调用与列表中该模式关联的不同函数 如果可能的话我想用 python 来做这件事 提前致谢 im
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File

随机推荐

  • 如何在 XSD 中引用全局类型?

    如何实现对 simpleType 的 XSD 内部引用 我遇到了您在下图中看到的错误 XSD
  • Delphi中OnKeyDown的问题

    我正在与德尔福合作 我想跟踪按下了哪个键 我正在使用 TForm 的 KeyDown 事件 它工作正常 但问题是 如果我按小写字母 但它会给出该字母的大写字母 如何识别按下的按键是小写还是大写 如果您想跟踪字母数字键 那么您应该使用KeyP
  • 将 Facebook 登录应用程序与 Facebook 粉丝页面链接有什么优势?

    我正在创建一个电子商务网站 我将支持 FB 登录 我也会有一个FB粉丝专页 在支持 facebook 登录应用程序的同时 可以选择将 FB 页面附加到登录应用程序 App gt app name gt 应用程序详细信息 gt 联系信息 gt
  • iOS静默推送通知已取消

    在我的应用程序中 我使用静默推送通知来定期通信 但我遇到了麻烦 因为我在未启动应用程序时收到的静默推送通知未被处理 操作系统版本为iOS12 我正在使用 FCM 发送推送通知 有人有同样的问题吗 以下是您收到静默推送通知时的控制台日志 10
  • iOS 6 MPMoviePlayerViewController 和 PresentMoviePlayerViewControllerAnimated Rotation

    在以前的 iOS 版本中 我们的视频会自动旋转 但在 iOS 6 中不再是这种情况 我知道 PresentMoviePlayerViewControllerAnimated 以前是设计用于执行此操作的 但是我如何告诉 MPMoviePlay
  • Android:如何检测双 SD 卡[重复]

    这个问题在这里已经有答案了 有什么方法可以识别设备中是否有两张 SD 卡 Edit 我发现目前无法区分内部存储和真正的外部SD卡 在某些设备 例如 Samsung Galaxy Tab 7 英寸 中 系统将内部存储 通常为 16GB 视为外
  • Android:MediaPlayer AUDIOFOCUS_LOSS 和 setOnErrorListener() 问题

    我正在创建一个音乐播放器应用程序 我正在检查我的应用程序是否丢失 AudioFocus 然后播放将停止 但这提出了一个问题 当我播放一首曲目时 然后停止它 然后再次播放一首曲目 switch case AudioManager AUDIOF
  • String.equals() 是如何工作的

    我一直在尝试了解一些 API 方法是如何工作的 下面是 java lang String 类的 equals 方法的片段 有人可以告诉我代码实际上是如何比较两个字符串的吗 我明白了计数的重要性 但是偏移量意味着什么 这些变量如何获取值 就像
  • 从 Wikipedia API 获取名人

    我正在尝试从 Wikipedia API 中获取还活着的人 但我还不知道该怎么做 I found 这个问题这和我的一样 据我所知 唯一的方法是搜索只有birth date参数的人 我实际上该怎么做 例如 如果我想搜索 罗纳尔多 我应该得到所
  • Ionic V5 在 Safari 上出现 Angular 组件问题

    我遇到了 Ionic PWA 应用程序在 Safari 上针对以下 UI 组件的点击问题 离子无线电 离子选择 离子菜单 当您单击单选按钮组件 https ionicframework com docs api radio 1 时 您可以看
  • Oracle 中不带 FROM 子句的选择

    in SQL服务器可以在不引用表的情况下执行 SELECT 就像是 Select 1 2 3 my dummy string As Oracle不允许没有 FROM 的 SELECT 我使用双表进行此类操作 就像是 Select 1 2 3
  • RadioGroup 允许选择多个RadioButton

    我有一个在 XML 中定义的 RadioGroup 它有两个 RadioButton 但是 我需要将标签显示在按钮本身的左侧 标签左对齐 按钮右对齐 为此 我使用了包含 TextView 和 RadioButton 的relativelay
  • 绝对位置元素在静态父级中的行为究竟如何

    我问这个问题是因为昨天我必须设置几个 div 的样式 如下所示thisJSFiddle 示例 对我来说最棘手的部分是定位 div 就从 div 但保持它们顶部对齐 我也想要边界 div 走出它的父div 因此 经过一些研究 我是 CSS 初
  • 如何格式化要使用 arrayWithContentsOfFile 读取的文本文件

    我有几个大的单词列表 我已经将它们加载到代码中 如下所示 NSArray dict3 NSArray alloc initWithObjects abled about above absurd absurdity 但现在它实际上奇怪地导致
  • Actionscript3 阿尔法掩蔽?

    我试图在谷歌地图应用程序上应用聚光灯效果 具体来说 我画了一个跟随鼠标的圆圈 并将其设置为地图上的遮罩 问题是只有圆圈内的地图区域显示出来 我知道这就是蒙版应该看起来的样子 但是有没有办法使圆圈外的区域成为某种半透明 以便其下方的地图也可以
  • 如何在不使用“DisplayNameAttribute”的情况下更改 ViewModel 显示名称?

    我想直接更改 ViewModel 的 某些属性的显示名称 而不使用 DisplayName prop name 这应该发生直接在控制器内部在返回视图之前 或者在 ViewModel 类本身内部 我不想更改视图中的任何内容 也不想使用任何数据
  • 在 $navigateBack 中传递更改后的 props

    我有一个概述页面 人们可以在其中看到结果 他们可以选择通过单击编辑按钮来更改该值 通过单击编辑按钮 您将导航到可以更改值的其他页面 如果您更改了该值 您将返回到概述页面 但我的问题是我传递的道具this navigateBack 概览页面中
  • C++ ifstreamfailbit 和 badbit

    的情况下ifstream在C 中 在什么条件下failbit and badbit标志设置 根据cplusplus com failbit当错误与操作本身的内部逻辑相关时 通常由输入操作设置 因此流上的其他操作也是可能的 尽管badbit通
  • 使用 Seaborn 的 FacetGrid 时如何向所有绘图添加比较线

    我正在尝试使用 FacetGrid 将相同的比较线添加到多个图中 这是我陷入困境的地方 Import the dataset tips sns load dataset tips Plot using FaceGrid separated
  • 将预连接参数中的 Azure SQL DB 的 Azure AD 令牌传递给 SQLAlchemy create_engine()

    我想要通过 SQLAlchemy 使用 AD 令牌连接到 Azure SQL DB 我已经关注了https github com felipefandrade azuresqlspn并且可以通过此方法成功连接 但是 我想扩展它并使用 SQL