Как получить доступ к базе данных SQL Azure (не в контейнере) из контейнера докера - PullRequest
0 голосов
/ 20 мая 2019

У меня SQL-сервер работает на докере.Я пытаюсь подключиться к нему из веб-приложения, написанного на python3, с помощью pymssql.

Это работает, пока я не запускаю то же самое приложение в контейнере Docker.

Я получаю эту ошибку:

20002, сообщение об ошибке b'DB-Lib 20002, серьезность 9: \ nПодключение адаптивного сервера (nameofmydb.database.windows.net:1433)\n'.

Код:

pymssql.connect(server='mydb.database.windows.net', port='1433', database='mydb', user='user@server', password='pwd')

Я пытался с --net=host, но он тоже не работает.

Может кто-нибудь помочь мне, пожалуйста?

РЕДАКТИРОВАТЬ: Итак, я наконец преуспелПримерно через 2 дня, из-за установки драйвера odbc в контейнере, я делал это неправильно.Также я был вынужден использовать pyodbc да.Установите драйверы odbc + python, как вам скажет azure, в документации и используйте pyodbc, а не pymssql (который работает вне докера).

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Итак, я сделал все это.

Но теперь у меня есть это:

pyodbc.OperationalError: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

Я использовал odbcinst.ini, который находится в строках соединения в лазурной панели, которые соответствуют:

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so 
Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount=1

Я изменил драйвер и настройки в соответствии с док-контейнером.Код pyodbc:

pyodbc.connect( 'Driver={ODBC Driver 17 for SQL Server};Server=tcp:mydb.database.windows.net,1433;Database=mydb;Uid=myuser@mydb;Pwd=mypwd;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;'))

Также я повторяю это, но похоже, что все хорошо работает вне контейнера докера.я понятия не имею, что происходит ...

0 голосов
/ 21 мая 2019

Вы можете сослаться на этот блог: Ошибка адаптивного подключения к серверу (сообщение об ошибке DB-Lib 20002, серьезность 9) .

Попробуйте использовать pyodbc вместо pymssql.Я попытался, и это хорошо работает.

import pyodbc
server = 'XXX.database.windows.net'
database = 'dbname'
username = 'username'
password = 'psd'
driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)

Документ Azure Быстрый старт: использование Python для запроса базы данных SQL Azure также предоставляет пример:

import pyodbc
server = '<server>.database.windows.net'
database = '<database>'
username = '<username>'
password = '<password>'
driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName FROM [SalesLT].[ProductCategory] pc JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid")
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

Надеждаэто помогает.

...