使用python从连接url字符串中的azureDB主机名转义冒号

使用python从连接url字符串中的azureDB主机名转义冒号,python,azure-sql-database,Python,Azure Sql Database,嗨,我现在正试图通过python模块连接到azure数据库 当我像这样格式化连接字符串时 connection_string = f"{sql_config['driver']}://{username}:{password}@{sql_config['host']}:{sql_config['port']}/{sql_config['database']}?driver=ODBC+Driver+17+for+SQL+Server;Encrypt=yes;TrustServerCert

嗨,我现在正试图通过python模块连接到azure数据库

当我像这样格式化连接字符串时

connection_string = f"{sql_config['driver']}://{username}:{password}@{sql_config['host']}:{sql_config['port']}/{sql_config['database']}?driver=ODBC+Driver+17+for+SQL+Server;Encrypt=yes;TrustServerCertificate=no;"
connection = create_engine(connection_string)
当主机的名称中有冒号时,如“tcp:servername.database.windows.net”,它将返回
ValueError:invalid literal for int(),以10为基数:“servername.database.windows.net:1433”
,因为它认为冒号分隔主机和端口。有没有办法逃脱这个角色?我曾尝试使用
{}
'
'
来转义冒号,但没有成功


我希望将连接字符串保留为URL。

我确信这会使TCP成为协议,并可能使“servername.database.windows.net”成为主机。因此,我认为您应该将其拆分为“:”,然后将其重新格式化为“tcp:username:password@servername.database.windows.net:端口'。但是,我不完全确定TCP URI是什么样子,这只是我的猜测。谢谢,我会尝试一下,但是从AzureDB ODBC配置上看。驱动程序={ODBC驱动程序13 for SQL Server};Server=tcp:servername.database.windows.net,1433;我假设tcp:是数据库主机名的一部分?根据,我相当确定它不能是主机名,因此必须是协议。不幸的是,在提出的解决方案中,它最终被解析为用户名。冒号被解释为拆分时也会出现同样的问题