sql-server - 如何将 SQLAlchemy create_engine() 与包含 @ 的密码一起使用

标签 sql-server python-3.x sqlalchemy

这个有效:

db = pyodbc.connect('driver={SQL Server Native Client 11.0}; server=172.30.0.194; database=db;uid=someuser; pwd=fancy@password')

这不是

cn_string = "mssql+pyodbc://someuser:"fancy&password"@172.30.0.194/db?driver=SQL+Server+Native+Client+11.0"
return create_engine(cn_string)

这也不是:

driver = "SQL Server Native Client 11.0"
server = "192.30.0.194"
database = "EPM_Dashboard"
uid = "someuser"
pwd = "fancy@password"
params = f'DRIVER={{{driver}}};SERVER={server};DATABASE={database};UID={uid};PWD={{{pwd}}};'

connection_string = 'mssql+pyodbc:///?odbc_connect=%s' % urllib.parse.quote_plus(params)

return create_engine(connection_string)

我得到类似的东西:

登录超时已过期(0); [08001] [Microsoft][SQL Server Native Client 11.0]建立与 SQL Server 的连接时发生了与网络相关或特定于实例的错误。服务器未找到或不可访问。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。 (53)

如果 pyodbc 项目失败,这会更可信。

这是另一个失败:

return create_engine(urllib.parse.quote_plus('driver={SQL Server Native Client 11.0}; server=172.30.0.194; database=EPM_Dashboard;uid=someuser; pwd=fancy@password'))
    

我确定我遗漏了一个棘手的角色。

这里有一些资源

https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-databases

Special character in SQL password

SqlAlchemy equivalent of pyodbc connect string using FreeTDS

最佳答案

如果您需要构建一个可能包含“有趣字符”的连接 URI,那么您可以使用 engine.URL.create()为您构建它:

import sqlalchemy as sa

connection_uri = sa.engine.URL.create(
    "mssql+pyodbc",
    username="someuser",
    password="fancy@password",
    host="192.30.0.194",
    database="EPM_Dashboard",
    query={"driver": "SQL Server Native Client 11.0"},
)
print(connection_uri)
# mssql+pyodbc://someuser:fancy%40password@192.30.0.194/EPM_Dashboard?driver=SQL+Server+Native+Client+11.0

关于sql-server - 如何将 SQLAlchemy create_engine() 与包含 @ 的密码一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66371841/

相关文章:

c# SqlDecimal 在小数乘法中翻转符号

linux - 如何在 MAC 操作系统上将 Vertica 连接到 Python?我需要 Unix 还是 Linux 脚本?

python - 导入错误 : cannot import name 'BeautifulSoup4'

python - SQLAlchemy 属性错误 : 'NoneType' object has no attribute '_getter'

python - SQLAlchemy 记录更改日期和用户

sql-server - 是否可以访问 FILESTREAM 共享?

python - 在 python 中执行用于在 SQL Management Studio 中运行的 .sql 文件

sql - 如何选择处于时间戳之间状态的记录?数据库

python - 如何定位要销毁的 tkinter 根窗口?

python - 使用 SQLAlchemy 查询到 pandas df 时出现 SAWarning