Connectez votre base de données SQL Server à Alibaba Cloud Function Compute à l'aide de Python

Ce document décrit comment utiliser la base de données SQL ** Server ** avec ** Alibaba Cloud Function Compute ** et comment configurer et valider ** Function Compute ** basé sur fc-docker.

Préparation de l'environnement de test

Utilisez Docker pour exécuter SQL Server 2017 sur votre ordinateur Mac local, initialisez la structure de la table, créez un fichier de test nommé index.py et voyez si vous pouvez accéder à la base de données.

$ 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

Démarrez SQL Server à partir du port 1433 et définissez le mot de passe du compte SA sur 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

Utilisez Homebrew pour installer le client MSSQL SQLCMD.

$ 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)

Créez une base de données de test nommée 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)

Créez une table nommée Inventaire et insérez une ligne de données de test.

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

(1 rows affected)
1> QUIT

Confirmez que les données ont été insérées avec succès et quittez.

Préparation de la fonction de test

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

Développez une fonction de test nommée index.py. Cette fonction se connecte au serveur SQL sur docker.for.mac.host.internal sur l'hôte Mac, mais fc-docker exécute la fonction à l'intérieur du conteneur et ne se connecte pas à localhost. Il exécute ensuite l'instruction de requête et renvoie le résultat.

Installation terminée v - Dernière version de pymssql

Créez un répertoire vide et placez-y le fichier index.py. Basculez le chemin actuel de la session de commande vers le répertoire où se trouve index.py. Exécutez ensuite la commande suivante.

$ 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. Dans cet exemple, l'environnement d'exécution Python 3.6 (aliyunfc / runtime-python3.6) fourni par fc-docker est utilisé. Les deuxième et première lignes sont utilisées pour lancer un conteneur Docker qui ne se termine jamais, et la deuxième ligne docker exec est utilisée pour installer des dépendances sur le conteneur. La dernière ligne est utilisée pour terminer le conteneur. Étant donné que le chemin local & dollar; (pwd) est monté dans le répertoire / code du conteneur, le contenu du répertoire / code est conservé dans le chemin local actuel après avoir quitté le conteneur. 3, pip installe le package Wheel dans le répertoire / code avec le paramètre -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

Exécutez la commande ci-dessus. Le résultat de l'installation sera retourné. Si vous n'avez pas besoin d'utiliser une version antérieure de pymssql, ignorez les sections suivantes.

Installation de l'ancienne version complète de pymssql

Pour les versions de pymssql antérieures à 2.1.3, l'exécution de la commande pip install compile pymssql et l'installe à partir du code source. Dans ce cas, installez le freetds-dev dépendant de la compilation et le libsybdb5 dépendant de l'exécution. Les dépendances de compilation peuvent être installées directement dans le répertoire système, mais les dépendances d'exécution doivent être installées dans le répertoire local.

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

Démarrez le conteneur dans les 1ère et 1ère colonnes, arrêtez le conteneur dans la 10ème colonne et supprimez-le automatiquement. Les lignes 2, 2 et 3 sont utilisées pour installer la libsybdb5 dépendante de l'exécution dans un répertoire local. 3. Liez la DLL libsybdb.so.5 au répertoire / code / lib, qui est ajouté par défaut à LD_LIBRARY_PATH. 4. Installez freetds-dev et cython dans le répertoire système, puis compilez et installez pymssql. Aucune des deux bibliothèques n'est nécessaire lors de l'exécution de pymssql, vous n'avez donc pas besoin de l'installer dans votre répertoire local. 5. Installez pymssql 2.1.3. À partir de pymssql 2.1.4, le code source n'est plus requis lors de l'installation.

$ 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

L'examen a réussi.

Conclusion

Ce document décrit comment utiliser la base de données SQL Server (https://www.alibabacloud.com/en/product/apsaradb-for-rds-sql-server) avec Alibaba Cloud Function Compute. Vous n'avez plus besoin du code source pour installer la dernière version de pymssql. Cependant, la méthode d'installation de pymssql à partir d'un package de code source à l'aide de pip peut être appliquée à des scénarios similaires.

Ce document décrit également comment configurer et valider Function Compute basé sur fc-docker. Différents fichiers de fcli sbox et fc-docker peuvent être développés en tant que scripts et exécutés à plusieurs reprises, et fc-docker peut être exécuté dans l'environnement d'exécution local simulé. Les deux fonctionnalités sont très utiles dans les scénarios d'intégration continue (CI).

Les références

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

Connectez votre base de données SQL Server à Alibaba Cloud Function Compute à l'aide de Python
Connectez Raspberry Pi à Alibaba Cloud IoT Platform avec «Python»
Connectez-vous à la base de données utf8mb4 à partir de python
[python] Comment ajouter RDF triple à votre propre serveur Fuseki en utilisant rdflib
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 2: importer des données dans SQL Server à l'aide de PowerShell
Connectez votre Raspberry Pi à votre smartphone en utilisant Blynk
J'ai créé une fonction pour récupérer les données de la colonne de base de données par colonne en utilisant sql avec sqlite3 de python [sqlite3, sql, pandas]
Accès ODBC à SQL Server depuis Linux avec Python
Connectez python à mysql
Envoyer un message du serveur à l'extension Chrome à l'aide de Google Cloud Messaging pour Chrome
Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python
Connectez-vous au réseau Bitcoin en utilisant pycoin (Python Cryptocoin Utili)
Autoriser l'exécution rapide des scripts Python dans Cloud Run à l'aide du répondeur
Touchez NoSQL avec Python à l'aide d'Oracle NoSQL Database Cloud Simulator
Connectez-vous à BigQuery avec Python
Connectez-vous à Wikipedia avec Python
Publier sur Twitter en utilisant Python
Commencez à Selenium en utilisant python
Connectez-vous à sqlite depuis python
[Alibaba Cloud] Faites quelque chose comme SSI même avec OSS / Function Compute
Créez un classement de jeu sur le cloud Alibaba en utilisant Python et Redis
[Didacticiel d'analyse Python dans la base de données avec SQL Server 2017] Étape 6: Utilisation du modèle
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Essayez de vous connecter automatiquement à Netflix en utilisant python sur votre PC