是否可以将字典传递到 SQLAlchemy 中的 create_engine 函数中?

mde*_*cpm 0 python sqlalchemy

我正在尝试启动与 Azure SQL 数据库的连接。出于安全原因,我无法硬编码用户名和密码,我需要从配置文件中的字典中获取它,并以这种方式将其放入连接 URL 中。

当我尝试这样做并在 Jupyter 笔记本中运行它时, 并{key[value]}没有被配置文件中引用的内容替换。

如果我使用格式化字符串,我会得到一个KeyError. 如果我不使用格式化字符串,它只会打印{variablename}字面意思。

Sup*_*oot 8

您不能直接传递字典create_engine()作为 url 的替代品,但是您可以传递一个sqlalchemy.engine.url.URL可以使用 轻松实例化的对象dict

来自文档

该对象适合直接传递给 create_engine() 调用。

例如:

from sqlalchemy.engine.url import URL

config = dict(
    drivername='driver',
    username='username',
    password='qwerty1',
    host='127.0.0.1',
    port='5000',
    database='mydb',
    query={'encoding': 'utf-8'}
)

url = URL.create(**config)

print(url)  # driver://username:qwerty1@127.0.0.1:5000/mydb?encoding=utf-8

engine = create_engine(url, echo=True)
Run Code Online (Sandbox Code Playgroud)

但是,您在传递字符串格式的 URL 时遇到的问题不太可能是 SQLAlchemy 问题,因为字符串格式化会在create_engine()获取字符串之前进行。不幸的是,您的问题没有包含重现您所遇到的确切问题的示例,因此我不能说更多。