Verbinden Sie Ihre SQL Server-Datenbank mit Python mit Alibaba Cloud Function Compute

In diesem Dokument wird beschrieben, wie Sie die SQL ** Server ** -Datenbank mit ** Alibaba Cloud Function Compute ** verwenden und ** Function Compute ** basierend auf fc-docker konfigurieren und validieren.

Testumgebung vorbereiten

Verwenden Sie Docker, um SQL Server 2017 auf Ihrem lokalen Mac-Computer auszuführen, die Tabellenstruktur zu initialisieren, eine Testdatei mit dem Namen index.py zu erstellen und zu prüfen, ob Sie auf die Datenbank zugreifen können.

$ docker pull mcr.microsoft.com/mssql/server:2017-latest

$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Codelife.me' \
   -p 1433:1433 --name sql1 \
   -d mcr.microsoft.com/mssql/server:2017-latest

Starten Sie SQL Server über Port 1433 und setzen Sie das Kennwort für das SA-Konto auf "Codelife.me".

$ brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
$ brew update
$ ACCEPT_EULA=y brew install --no-sandbox msodbcsql mssql-tools

Verwenden Sie Homebrew, um den MSSQL-Client SQLCMD zu installieren.

$ sqlcmd -S localhost -U SA -P 'Codelife.me'
1>CREATE DATABASE TestDB
2>SELECT Name from sys.Databases
3>GO
Name
-----------------------------------------------
master
tempdb
model
msdb
TestDB

(5 rows affected)

Erstellen Sie eine Testdatenbank mit dem Namen TestDB.

1> USE TestDB
2> CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
3> INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
4> GO
Changed database context to 'TestDB'.

(1 rows affected)

(1 rows affected)

Erstellen Sie eine Tabelle mit dem Namen Inventar und fügen Sie eine Zeile mit Testdaten ein.

1> SELECT * FROM Inventory WHERE quantity > 152;
2> GO
id          name                                               quantity
----------- -------------------------------------------------- -----------
          2 orange                                                     154

(1 rows affected)
1> QUIT

Bestätigen Sie, dass die Daten erfolgreich eingefügt wurden, und beenden Sie das Programm.

Vorbereitung der Testfunktion

import pymssql

def handler(event, context):
    conn = pymssql.connect(
        host=r'docker.for.mac.host.internal',
        user=r'SA',
        password=r'Codelife.me',
        database='TestDB'
    )
    
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM inventory WHERE quantity > 152')
    
    result = ''

    for row in cursor:
        result += 'row = %r\n' % (row,)

    conn.close()
    return result

Entwickeln Sie eine Testfunktion mit dem Namen index.py. Diese Funktion stellt eine Verbindung zum SQL Server unter "docker.for.mac.host.internal" auf dem Mac-Host her, aber fc-docker führt die Funktion im Container aus und stellt keine Verbindung zu localhost her. Anschließend wird die Abfrageanweisung ausgeführt und das Ergebnis zurückgegeben.

Installation abgeschlossen v - Neueste Version von pymssql

Erstellen Sie ein leeres Verzeichnis und platzieren Sie die Datei index.py darin. Wechseln Sie den aktuellen Pfad der Befehlssitzung in das Verzeichnis, in dem sich index.py befindet. Führen Sie dann den folgenden Befehl aus.

$ docker run --rm --name mssql-builder -t -d -v $(pwd):/code --entrypoint /bin/sh aliyunfc/runtime-python3.6
$ docker exec -t mssql-builder pip install -t /code pymssql
$ docker stop mssql-builder
  1. In diesem Beispiel wird die von fc-docker bereitgestellte Python 3.6-Laufzeitumgebung (aliyunfc / runtime-python3.6) verwendet. In der zweiten und ersten Zeile wird ein Docker-Container gestartet, der niemals endet, und in der zweiten Zeile wird Docker Exec verwendet, um Abhängigkeiten vom Container zu installieren. Die letzte Zeile wird verwendet, um den Container zu beenden. Da der lokale Pfad & dollar; (pwd) im Verzeichnis / code des Containers bereitgestellt ist, bleibt der Inhalt des Verzeichnisses / code nach dem Verlassen des Containers im aktuellen lokalen Pfad erhalten. In 3 installiert pip das Wheel-Paket im Verzeichnis / code mit dem Parameter -t.
$ docker run --rm -v $(pwd):/code aliyunfc/runtime-python3.6 --handler index.handler
row = (2, 'orange', 154)


RequestId: d66496e9-4056-492b-98d9-5bf51e448174          Billed Duration: 144 ms         Memory Size: 19

Führen Sie den obigen Befehl aus. Das Installationsergebnis wird zurückgegeben. Wenn Sie keine frühere Version von pymssql verwenden müssen, ignorieren Sie die folgenden Abschnitte.

Installation komplett alte Version von pymssql

Bei Versionen von pymssql vor 2.1.3 wird durch Ausführen des Befehls pip install pymssql kompiliert und aus dem Quellcode installiert. Installieren Sie in diesem Fall den kompilierungsabhängigen freetds-dev und den laufzeitabhängigen libsybdb5. Kompilierungsabhängigkeiten können direkt im Systemverzeichnis installiert werden, Ausführungsabhängigkeiten müssen jedoch im lokalen Verzeichnis installiert werden.

docker run --rm --name mssql-builder -t -d -v $(pwd):/code --entrypoint /bin/sh aliyunfc/runtime-python3.6

docker exec -t mssql-builder apt-get install -y -d -o=dir::cache=/code libsybdb5
docker exec -t mssql-builder bash -c 'for f in $(ls /code/archives/*.deb); do dpkg -x $f $(pwd) ; done;'
docker exec -t mssql-builder bash -c "rm -rf /code/archives/; mkdir /code/lib;cd /code/lib; ln -sf ../usr/lib/x86_64-linux-gnu/libsybdb.so.5 ."
docker exec -t mssql-builder apt-get install -y freetds-dev 
docker exec -t mssql-builder pip install cython 
docker exec -t mssql-builder pip install -t /code pymssql==2.1.3

docker stop mssql-builder

Starten Sie den Container in der 1. und 1. Spalte, stoppen Sie den Container in der 10. Spalte und löschen Sie ihn automatisch. Die Zeilen 2, 2 und 3 werden verwendet, um die laufzeitabhängige libsybdb5 in einem lokalen Verzeichnis zu installieren. 3. Verknüpfen Sie die DLL libsybdb.so.5 mit dem Verzeichnis / code / lib, das standardmäßig zu LD_LIBRARY_PATH hinzugefügt wird. 4. Installieren Sie freetds-dev und cython im Systemverzeichnis und kompilieren und installieren Sie pymssql. Keine der Bibliotheken wird benötigt, wenn Sie pymssql ausführen, sodass Sie sie nicht in Ihrem lokalen Verzeichnis installieren müssen. 5. Installieren Sie pymssql 2.1.3. Ab pymssql 2.1.4 wird der Quellcode während der Installation nicht mehr benötigt.

$ docker run --rm -v $(pwd):/code aliyunfc/runtime-python3.6 --handler index.handler
row = (2, 'orange', 154)


RequestId: d66496e9-4056-492b-98d9-5bf51e448174          Billed Duration: 144 ms         Memory Size: 19

Die Prüfung ist bestanden.

Fazit

In diesem Dokument wird die Verwendung der SQL Server-Datenbank (https://www.alibabacloud.com/de/product/apsaradb-for-rds-sql-server) mit Alibaba Cloud Function Compute beschrieben. Sie benötigen den Quellcode nicht mehr, um die neueste Version von pymssql zu installieren. Die Methode zum Installieren von pymssql aus einem Quellcodepaket mit pip kann jedoch auf ähnliche Szenarien angewendet werden.

In diesem Dokument wird auch beschrieben, wie Sie Function Compute basierend auf fc-docker konfigurieren und validieren. Verschiedene Dateien von fcli sbox und fc-docker können als Skripte entwickelt und wiederholt ausgeführt werden, und fc-docker kann in der simulierten lokalen Laufzeitumgebung ausgeführt werden. Beide Funktionen sind in CI-Szenarien (Continuous Integration) sehr nützlich.

Verweise

1、https://pymssql.readthedocs.io/en/latest/intro.html#install 2、http://www.freetds.org/ 3、https://pymssql.readthedocs.io/en/latest/pymssql_examples.html 4、https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017 5、https://cloudblogs.microsoft.com/sqlserver/2017/05/16/sql-server-command-line-tools-for-macos-released/

Recommended Posts

Verbinden Sie Ihre SQL Server-Datenbank mit Python mit Alibaba Cloud Function Compute
Verbinden Sie Raspberry Pi mit "Python" mit der Alibaba Cloud IoT Platform
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
[Python] So fügen Sie RDF Triple mithilfe von rdflib zu Ihrem eigenen Fuseki-Server hinzu
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 2: Importieren Sie Daten mit PowerShell in SQL Server
Verbinden Sie Ihren Raspberry Pi mit Blynk mit Ihrem Smartphone
Ich habe eine Funktion zum Abrufen von Daten aus der Datenbank spaltenweise mithilfe von SQL mit SQLite3 von Python [SQLite3, SQL, Pandas] erstellt.
ODBC-Zugriff auf SQL Server von Linux mit Python
Verbinden Sie Python mit MySQL
Senden Sie mithilfe von Google Cloud Messaging für Chrome eine Nachricht vom Server an die Chrome-Erweiterung
So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück
Stellen Sie mit Pycoin (Python Cryptocoin Utili) eine Verbindung zum Bitcoin-Netzwerk her.
Ermöglichen Sie die schnelle Ausführung von Python-Skripten in Cloud Run mithilfe des Responders
Berühren Sie NoSQL mit Python mithilfe des Oracle NoSQL Database Cloud Simulators
Stellen Sie mit Python eine Verbindung zu BigQuery her
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Mit Python auf Twitter posten
Starten Sie mit Python zu Selen
Stellen Sie von Python aus eine Verbindung zu SQLite her
[Alibaba Cloud] Machen Sie so etwas wie SSI auch mit OSS / Function Compute
Erstellen Sie mit Python und Redis eine Rangliste für Spiele in der Alibaba-Cloud
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 6: Verwenden des Modells
Herstellen einer Verbindung zum Cloud Firestore über Google Cloud-Funktionen mit Python-Code
Versuchen Sie, sich mit Python auf Ihrem PC automatisch bei Netflix anzumelden