Экранирование двоеточия из имени хоста azureDB в строке URL-адреса подключения с помощью python

#python #azure-sql-database

Вопрос:

Привет, я сейчас пытаюсь подключиться к базе данных azure через модуль python.

Когда я форматирую строку подключения следующим образом

 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() with base 10: 'servername.database.windows.net:1433' , поскольку, по его мнению, двоеточие разделяет хост и порт. Есть ли в любом случае способ сбежать от персонажа? Я пытался использовать {} , '' , "" чтобы избежать двоеточия, но безуспешно.

Я хотел бы сохранить строку подключения в качестве URL-адреса.

Комментарии:

1. Я совершенно уверен, что это делает TCP протоколом, и, возможно, ‘servername.database.windows.net-хозяин. Поэтому я думаю, что вы должны разделить его на»:», а затем переформатировать в «tcp:username:password@servername.database.windows.net:port». Однако я не совсем уверен, как выглядит TCP URI, это только мое предположение.

2. Спасибо, я попробую это сделать, но из того, что я вижу в конфигурации AzureDB ODBC. Драйвер={Драйвер ODBC 13 для SQL Server};Server=tcp:servername.database.windows.net,1433; Я предполагаю, что tcp: является частью имени хоста базы данных?

3. Согласно RFC по именам хостов , я совершенно уверен, что это не может быть именем хоста, и, следовательно, должен быть протокол.

4. К сожалению, при предложенном решении он в конечном итоге анализируется как имя пользователя. Та же проблема возникает, когда двоеточие интерпретируется как расщепление