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