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

时间:2019-04-28 23:36:55

标签: python sqlalchemy

我正在尝试建立与Azure SQL数据库的连接。出于安全原因,我无法对用户名和密码进行硬编码,因此需要从配置文件中的字典中获取该密码,然后将其放入连接URL。

当我尝试这样做并在Jupyter笔记本中运行它时,lists并没有被配置文件中引用的内容取代。

如果我使用格式化的字符串,则会得到{key[value]}。如果我不使用格式化的字符串,它只会按字面意义打印KeyError

1 个答案:

答案 0 :(得分:0)

您不能直接将字典传递给create_engine()来代替URL,但是可以传递sqlalchemy.engine.url.URL对象,该对象可以轻松地用dict实例化。

来自the docs

  

该对象适合直接传递给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(**config)

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

engine = create_engine(URL, echo=True)

但是,传递字符串格式的URL时遇到的问题不太可能是SQLAlchemy问题,因为字符串格式将在create_engine()移交给字符串之前进行。不幸的是,您的问题没有包含一个可以重现您所遇到的确切问题的示例,所以我不能说太多了。