Greifen Sie mit python27 / pyodbc auf dem Container auf den SQL Server des Hosts zu

Überblick

Ich habe neulich im folgenden Artikel vorgestellt, wie man auf MySQL zugreift: Greifen Sie mit python3 / mysql-connector-python auf dem Container auf die Host-MySQL zu Einführung in die SQL Server-Version.

Annahme

Host SQL Server

ODBC Driver 17 for SQL Server Wird auf Port 1443 mit SQL Server-Authentifizierung ausgeführt

Verfahren

[So erstellen Sie einen Docker-Container, in dem ODBC ausgeführt wird] Klonen Sie das folgende Repository im Artikel (https://qiita.com/e_tyubo/items/9c01f92480d90fc8c092). https://github.com/Microsoft/mssql-docker/tree/master/oss-drivers/pyodbc

> git clone https://github.com/microsoft/mssql-docker.git
> cd mssql-docker/oss-drivers/pyodbc

Ich denke, es hat den folgenden Baum.

pyodbc
├── Dockerfile
├── README.md
├── docker-compose.yml *docker-Zum Starten mit Compose hinzugefügt
├── entrypoint.sh
└── sample.py *Bearbeiten Oder Sie erstellen eine andere Datei. Ich habe keine Berührung...

Dockerfile


# mssql-python-pyodbc
# Python runtime with pyodbc to connect to SQL Server
FROM ubuntu:16.04

# apt-get and system utilities
RUN apt-get update && apt-get install -y \
    curl apt-utils apt-transport-https debconf-utils gcc build-essential g++-5\
    && rm -rf /var/lib/apt/lists/*

# adding custom MS repository
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

# install SQL Server drivers
RUN apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql unixodbc-dev

# install SQL Server tools
RUN apt-get update && ACCEPT_EULA=Y apt-get install -y mssql-tools
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
RUN /bin/bash -c "source ~/.bashrc"

# python libraries
RUN apt-get update && apt-get install -y \
    python-pip python-dev python-setuptools \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

# install necessary locales
RUN apt-get update && apt-get install -y locales \
    && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
    && locale-gen
RUN pip install --upgrade pip

# install SQL Server Python SQL Server connector module - pyodbc
RUN pip install pyodbc

# install additional utilities
RUN apt-get update && apt-get install gettext nano vim -y

# add sample code
RUN mkdir /sample
ADD . /sample
WORKDIR /sample

CMD /bin/bash ./entrypoint.sh

docker-compose.yaml


version: '3'
services:
  pyodbc:
    restart: always
    build: .
    container_name: 'pyodbc'
    working_dir: '/sample'
    tty: true
    volumes:
      - .:/sample
    extra_hosts:
      - "(Host-Computername):(Host-IP-Adresse)"
    ports:
      - 1443:1443

sample.py


import pyodbc


server = '(Host-IP-Adresse),(Host SQL Server-Betriebsport)'
username = 'sa'
password = 'password'

cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';database=(Name der Datenbank);UID='+username+';PWD='+password)
cursor = cnxn.cursor()

print ('Using the following SQL Server version:')
tsql = "SELECT @@version;"
with cursor.execute(tsql):
    rows = cursor.fetchall()
    for row in rows:
        print(str(row))

> docker-compose up -d --build
...
> docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2c51574bfd36        pyodbc_pyodbc       "/bin/sh -c '/bin/ba…"   51 minutes ago      Up 51 minutes       0.0.0.0:1443->1443/tcp   pyodbc
> docker exec -it 2c51574bfd36 /bin/bash
$ python --version
Python 2.7.12
$ python sample.py
Using the following SQL Server version:
(u'Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) \n\tAug 22 2017 17:04:49 \n\tCopyright (C) 2017 Microsoft Corporation\n\tExpress Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 18362: ) (Hypervisor)\n', )

Ergebnis

Ich konnte auf SQL Server zugreifen und die Datenbank sicher durchsuchen.

Späterer Vortrag (zusätzlicher Inhalt am 28. Februar 2020)

Beim Zuweisen einer Zeichenfolge zu einem Dokument hier tritt ein Fehler auf

Änderungen

sample.py


tsql = '''\
    SELECT *
FROM
	~
INNER JOIN
	~
ON
'''

Fehlerinhalt

$ python sample.py 
  File "sample.py", line 17
SyntaxError: Non-ASCII character '\xe7' in file sample.py on line 18, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

  File "sample.py", line 54, in <module>
    with cursor.execute(tsql):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 48: ordinal not in range(128)

Versuchtes Verfahren

Der folgende Artikel hat es nicht gelöst. http://shu223.hatenablog.com/entry/20111201/1328334689

Der folgende Artikel hat es nicht gelöst. https://qiita.com/chatrate/items/eb4b05cd1a6652529fd9

Gelöste Prozedur

Ich habe es gelöst, indem ich mich auf Folgendes bezog. https://kaworu.jpn.org/python/Python%E3%81%AEUnicodeDecodeError%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95

sample.py


- with cursor.execute(tsql):
+ with cursor.execute(tsql.decode('utf-8')):

Spätere Überarbeitung des Gesprächs (zusätzlicher Inhalt am 29. Februar 2020)

Unterstützt variable Host-IP-Adresse

Es scheint, dass es innerhalb des Containers einen Alias namens "host.docker.internal" gibt, der im Host-Betriebssystem auf "% COMPUTERNAME%" verweist.

docker-compose.yml


-    extra_hosts:
-      - "(Host-Computername):(Host-IP-Adresse)"

Recommended Posts

Greifen Sie mit python27 / pyodbc auf dem Container auf den SQL Server des Hosts zu
ODBC-Zugriff auf SQL Server von Linux mit Python
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 6: Verwenden des Modells
[In-Database Python Analysis Tutorial mit SQL Server 2017]
Laden Sie mit Python Dateien im Web herunter
Ermitteln Sie mit Selenium + PhantomJS + Python die Breite des Div auf der Serverseite
Stellen Sie das in Python unter SQL Server erstellte Vorhersagemodell bereit und verwenden Sie es
Zeichentipps mit matplotlib auf der Serverseite
Einführung in Python mit Atom (unterwegs)
Lokaler Server mit Python
Yum-Befehl zum Zugriff auf MySQL mit Python 3 unter Linux
Machen Sie mit Python einen Haltepunkt auf der c-Ebene
Informationen zur Steuerung von Motoren mit Python auf RaspberryPi
Installieren Sie django auf Python + Anaconda und starten Sie den Server
Test.py wird auf dem Webserver in Python3 nicht angezeigt.
Versuchen Sie, die Datentabelle von Azure SQL Server mit pyodbc zu extrahieren
Wenn Sie auf den Webserver zugreifen, L Chika mit Arduino
Einfacher HTTP-Server mit Python
Rufen Sie die API mit python3 auf.
Greifen Sie mit Python auf Google Drive zu
Speichern Sie Bilder im Web mit Python (Colab) auf einem Laufwerk.
Rufen Sie den Hostnamen des Host-PCs mit Docker unter Linux ab
Setzen Sie Ubuntu in Raspi ein, setzen Sie Docker darauf und steuern Sie GPIO mit Python aus dem Container
Lebensspiel mit Python [ich habe es geschafft] (auf Terminal & Tkinter)
Wie ist der Fortschritt? Lassen Sie uns mit dem Boom in Python weitermachen
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Erste Schritte mit dem Python-Framework Django unter Mac OS X.
Die Synchronisierung mit dem Server, der ssh auf localhost portiert hat, schlägt fehl. [Gelöst]
Einstellungen zum Starten des Dango-Projekts auf dem Server mit Pycharm
[In-Database Python Analysis Tutorial mit SQL Server 2017] Schritt 1: Laden Sie Beispieldaten herunter
Hosten Sie die Netzwerkbibliothek Mirror for Unity auf einem Linux-Server
Extrahieren Sie die xz-Datei mit Python
Installieren Sie Python 3 auf dem Sakura-Server (FreeBSD)
Holen Sie sich das Wetter mit Python-Anfragen 2
Finden Sie die Bearbeitungsentfernung (Levenshtein-Entfernung) mit Python
Klicken Sie mit Python auf die Etherpad-Lite-API
Installieren Sie das Python-Plug-In mit Netbeans 8.0.2
Ich mochte den Tweet mit Python. ..
Hinweise zur Verwendung von rstrip mit Python.
Beherrsche den Typ mit Python [Python 3.9 kompatibel]
Holen Sie sich den Hostnamen in Python
Erste Schritte mit Python 3.8 unter Windows
Sakura Verwenden von Python im Internet
Greifen Sie mit Python auf die Twitter-API zu
Hinweise zur Verwendung von matplotlib auf dem Server
[Memo] Tweet auf Twitter mit Python
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten!
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 3: Erkunden und Visualisieren von Daten
Bearbeiten Sie die Datei des SSH-Verbindungszielservers auf dem Server mit VS-Code
Was tun, wenn der Server nicht mit dem Runserver python manage.py startet?
Version 2019: Trendanalyse für nicht autorisierten Zugriff (Beispiel eines Allzweckservers in der Cloud)
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Lesen Sie die Datei mit Python und löschen Sie die Zeilenumbrüche [Hinweise zum Lesen der Datei]
L Chika (HTTPS-kompatibel) mit Arduino beim Zugriff auf den Webserver
Vergleichen Sie die nächtliche Rendite und die tagsüber stattfindende Rendite des durchschnittlichen Aktienkurses von Nikkei mit Python
Janken Poi mit Python Lassen Sie uns für Anfänger auf einem lokalen Windows-Server laufen