Как база данных Acess Docker создается Azure-iot-edge За пределами Apllication (например, Python)? - PullRequest
0 голосов
/ 11 июня 2019

Я настроил модуль Sql с края, который хранит данные из демонстрационного модуля «tempsensor» в базу данных sql на основе Docker-контейнера. Данные доступны через Mssql-tools-sqlcmd, где я могу получить запрос к базе данных. Но когда я пытаюсь получить доступ к базе данных с помощью другого приложения (я пытался с Python), это не сработало для меня

Я пробовал с pyodbc, но он не работает! Когда я попытался с установленным драйвером ODBC, я получил ошибку тайм-аута. Затем я попытался с драйвером FreeTDS, и это также не сработало для меня.

ссылки - https://docs.microsoft.com/en-us/azure/iot-edge/tutorial-store-data-sql-server

#this shows I am getting the data from the table with sql tool 

  acn-iot2@acniot2-UPC-GWS01:~$ sudo docker exec -it sql bash

root @ 2b08418b1986: / # / opt / mssql-tools / bin / sqlcmd -S localhost -U SA -P 'Сильный! Passw0rd' 1> ВЫБРАТЬ * ИЗ ИЗМЕРЕНИЙDB.dbo.TemperaMeasurements 2> идти измерениеВремя расположения температуры
-------------------------------------- ------------ -------------------------------------- ------------ ------------ 2019-06-10 11: 36: 46.9392878 машина 21.363193834486001 2019-06-10 11: 36: 46.9392878 окружающий 20.628800209671599 2019-06-10 11: 36: 52.8738186 машина

#############################################################################

Код Python, который я использовал

 import pyodbc 
  server = 'localhost,1433' 
  database = 'MeasurementsDB' 
  username = 'su' 
  password = 'Strong!Passw0rd' 
  cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL          
  Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+   
  password)
  cursor = cnxn.cursor()

Я получаю сообщение об ошибке типа

  pyodbc.OperationalError: ('HYT00', '[HYT00] [unixODBC][Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')

но когда я пытаюсь читать с python, я не могу читать.

1 Ответ

2 голосов
/ 12 июня 2019

Хотя ваш код использует username = 'su' там, где он должен быть username = 'sa', но я думаю, что это не проблема, потому что вы получаете тайм-аут.

Я полагаю, вы подключаете базу данных внутри контейнера с кодом Python, который запускает вне контейнера.

В этом случае вы должны скопировать код Python в контейнер и запустить его, либо открыть порт 1433 и подключиться к <container_id>:1433 вместо localhost,1433

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...