[IBM Cloud] J'ai essayé d'accéder à la table Db2 on Cloud à partir de Cloud Funtions (python)

introduction

En parlant de services cloud, il y avait une image comme AWS, mais IBM propose également des services comme «IBM Cloud». Après enquête, de nombreux services sont fournis dans IBM Cloud et certains services peuvent être utilisés gratuitement. En particulier, je pense qu'il est assez important que vous puissiez utiliser gratuitement un IBM RDBMS "DB2" typique s'il fait 200 Mo ou moins (à partir de 2020/07). Si vous faites différentes choses individuellement, 200 Mo suffiront. De même, en coopération avec "IBM Cloud Funtions" qui peut être utilisé gratuitement si le nombre de requêtes est inférieur à un certain montant, j'ai essayé de décrire jusqu'à ce qu'il devienne possible de parcourir / mettre à jour la table sur Db2 sur Cloud.

Ce que j'ai fait

① Essayez de créer un service DB2

Il démarre après la création d'un compte IBM Cloud. Écran de connexion IBM Cloud (https://cloud.ibm.com/login)

01.Login.jpg

Tapez db2 dans la zone de recherche pour ouvrir l'écran du service db2. 02.db2を選択.jpg

Sélectionnez Londres ou Dallas comme région et Lite comme plan tarifaire. Veuillez noter qu'il n'existe pas de plan Lite dans les régions autres que ces deux. Le bouton de création en bas à droite crée le service db2 03.db2サービス作成.png

Le service db2 a été créé. Avant de créer une table ou quelque chose, créez vos informations d'identification. Vous en aurez besoin lors de la connexion à la base de données depuis Cloud Function. Ouvrez "Informations d'identification du service" dans le menu de gauche. 04.db2サービス作成した後.png

Immédiatement après la création du service db2, je pense qu'il n'y a pas d'informations d'identification. ① Cliquez sur le bouton "Créer des informations d'identification". Vous serez invité à entrer un nom, alors entrez quelque chose. ② Les informations d'identification seront créées, alors appuyez sur la partie comme "V" sur le côté gauche du nom pour ouvrir les informations. ③ Notez la partie commençant par "ssldsn" car elle est requise pour la connexion. 07.資格情報作成の後_copy.jpg

Après avoir créé les informations d'identification, ouvrez la console db2. Sélectionnez "Gérer" dans le menu de gauche et appuyez sur le bouton "Ouvrir la console". 08.コンソールを開く.jpg

Maintenant que le service db2 a été créé, créez une table. Cette fois, nous allons créer une table en lisant le fichier csv préparé à l'avance. Cliquez sur l'icône verte à trois lignes en haut à gauche et ouvrez dans l'ordre LOAD → Load Data. 09.LoadData.jpg

Cette fois, nous utiliserons le fichier csv suivant.

table_test.csv


NUMBER,NAME,UPDATE_TIME
1,Taro,2020-01-01 18:00:00
2,Hanako,2020-02-03 21:00:00
3,Mike,2020-02-14 14:30:00

Faites glisser et déposez le fichier csv cible vers "Sélection de fichier" près du centre. Après avoir téléchargé le fichier, cliquez sur le bouton "Suivant" en bas à droite pour continuer. 10.FileUpload.jpg

L'écran de sélection d'un schéma / table s'affiche. Cette fois, nous allons créer une nouvelle table avec le schéma existant. Quant à Schema, mis à part le schéma avec des noms systématiques tels que "AUDIT" et "DB2INST1", je pense qu'il existe un schéma avec 3 caractères anglais + 5 chiffres, alors sélectionnez-le. Pour le tableau suivant, cliquez sur «Nouveau tableau» en haut à droite. Dans Créer une nouvelle table, entrez le nom de la table et cliquez sur le bouton "Créer". Enfin, appuyez sur le bouton "Suivant" en bas à droite pour passer à l'écran suivant. 11.CreateTable.png

Ce sera un écran pour définir le nom de la colonne, etc. Cette fois, cliquez simplement sur le bouton "Suivant" en bas à droite pour continuer. 12.TableColumnSetting.png

Cliquez sur le bouton "Commencer le chargement" en bas à droite. 14.ReviewSetting.jpg

Attendez un instant que le chargement ait lieu. Une fois le chargement terminé, vous pouvez vérifier la table chargée avec le bouton "Afficher la table". Il semble que vous puissiez voir le pourcentage d'enregistrements qui ont réussi / échoué à se charger dans le graphique circulaire. 15.LoadDetail.jpg

Ceci termine la création de configuration / table du côté Db2.

Créons une fonction à SELECT

Ensuite, préparez Cloud Functions (actions) pour exécuter python. Revenez à la page d'accueil d'IBM Cloud et saisissez function dans la zone de recherche pour ouvrir "Fonctions". 16.FindFunction.jpg

Cliquez sur le bouton "Démarrer la création". 17.BeginFunction.png

Cette fois, sélectionnez "Action". 16-2.SelectFunction.jpg

Saisissez le nom de l'action. Puisque nous codons en python cette fois, sélectionnez "Python 3.7" pour le runtime et appuyez sur le bouton "Créer". 18.MakeAction.jpg

C'est devenu un écran de codage. Il semble que le processus décrit dans la fonction principale préparée par défaut soit exécuté en invoquant l'action. 19.Coding.jpg

Dans la fonction principale, écrivez le processus avec python. Cette fois, j'ai créé le code ci-dessous pour obtenir une ligne spécifique de la table de test. Au minimum, seul le traitement à opérer est décrit, donc lors de la description du traitement à exécuter réellement, il est préférable d'avoir le traitement des erreurs et la sortie du journal d'état du traitement.

select_test


import sys
import ibm_db

def main(dict):
    
    #Attribuez le contenu des informations d'identification à la variable ssldsn
    # "ssldsn":"DATABASE=XXXXX;HOSTNAME=XXXXX;PORT=XXXXX;PROTOCOL=TCPIP;UID=XXXXX;PWD=XXXXX;Security=SSL;"
    ssldsn = "DATABASE=XXXXX;HOSTNAME=XXXXX;PORT=XXXXX;PROTOCOL=TCPIP;UID=XXXXX;PWD=XXXXX;Security=SSL;"
    
    #Connexion DB
    db_conn = ibm_db.connect(ssldsn,"","")
    
    #Assemblage SQL
    sql = "SELECT * FROM TEST_TABLE WHERE NUMBER = ?"
    db_stmt = ibm_db.prepare(db_conn,sql)
    number = 3
    ibm_db.bind_param(db_stmt,1,number)
    
    #Exécution SQL
    ibm_db.execute(db_stmt)
    row = ibm_db.fetch_tuple(db_stmt)
    
    #Déconnexion DB
    ibm_db.close(db_conn)
    
    return {'name' : row[1] }

Après le codage, enregistrez-le avec le bouton "Enregistrer" en haut à droite. 21.ActionSave.jpg

Une fois sauvegardé, un bouton "Démarrer" apparaîtra au même endroit. Lorsque vous appuyez dessus, le code écrit sera exécuté et le résultat du traitement sera affiché. 20.ActionExec.jpg

Il est bon de se rappeler lors de l'exécution, la quantité de charge des fonctions est calculée par (taille de la mémoire utilisée) × (nombre cumulé de secondes utilisées) (à partir de 2020/07, 400000 Go peuvent être utilisés comme image libre ). Par conséquent, il est préférable de limiter la taille de la mémoire lors de son utilisation à des fins d'essai. Vous pouvez modifier la taille de la mémoire utilisée depuis "Runtime" dans le menu de gauche. 26.Runtime.jpg

Créons une fonction (avec des arguments) pour INSERER

Ensuite, créons des fonctions qui ajoutent des lignes à la table de test. À ce moment-là, essayez d'obtenir la valeur de la colonne "NAME" à partir de l'argument au moment de l'exécution de l'action. Assurez-vous également que la colonne "UPDATE_TIME" contient l'heure à laquelle l'action a été exécutée. Suivez les mêmes étapes que dans la section précédente pour créer une nouvelle action dans Funts. Cette fois, je l'ai nommé "insert_test". Le contenu du code est le suivant.

insert_test


import sys
import ibm_db
import datetime

def main(dict):
    #Copiez le contenu des informations d'identification
    ssldsn = "DATABASE=XXXXX;HOSTNAME=XXXXX;PORT=XXXXX;PROTOCOL=TCPIP;UID=XXXXX;PWD=XXXXX;Security=SSL;"    
    
    #Connexion DB
    db_conn = ibm_db.connect(ssldsn,"","")
    
    #Construction d'instruction SQL
    sql = "INSERT INTO TEST_TABLE VALUES(?,?,?)"
    db_stmt = ibm_db.prepare(db_conn,sql)
    
    id = 5
    name = dict['name']
    update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    ibm_db.bind_param(db_stmt,1,id)
    ibm_db.bind_param(db_stmt,2,name)
    ibm_db.bind_param(db_stmt,3,update_time)
    
    #Exécution de l'instruction SQL
    rtn = ibm_db.execute(db_stmt)
    
    #Déconnexion DB
    rc = ibm_db.close(db_conn)
    
    return { 'return-code': rtn }

Pour effectuer une action avec des arguments, cliquez sur le bouton "Lancer avec des paramètres" à gauche du bouton "Lancer".

La fenêtre contextuelle suivante s'affiche, saisissez donc les informations d'argument au format json. Le contenu décrit est stocké dans l'argument dict de la fonction principale. Cette fois, je veux obtenir la valeur de 'Jiro' à partir du dict avec la clé de 'nom', donc { 'name' : 'Jiro'} Et appuyez sur le bouton "Appliquer". 22.ActionInput.jpg

Appuyez ensuite sur le bouton "Lancer" pour effectuer l'action.

Assurez-vous que les lignes sont correctement ajoutées à la table de test. Ouvrez la console Db2 et cliquez sur l'icône verte à trois lignes en haut à gauche pour ouvrir RUN SQL. 23.OpenSQLConsole.jpg

Une console d'écriture SQL s'ouvre. Écrivez SQL ici et appuyez sur "Tout exécuter" en bas à gauche pour exécuter l'instruction SQL. Cette fois, je veux vérifier le contenu de la table de test, donc SELECT * FROM TEST_TABLE; Quand j'ai exécuté le SQL de, j'ai pu confirmer que la ligne avec le Name'Jiro'a été ajoutée. 24.RunSQL.png

À la fin

Je viens de démarrer IBM Cloud et il semble que je puisse créer quelque chose qui fonctionne comme ça même avec un compte Lite. Je pense que c'est parfait pour l'expérience du traitement sans serveur dans un environnement cloud. À l'avenir, je voudrais l'étendre afin que les actions puissent être exécutées par des déclencheurs (heure d'arrivée / téléchargement de fichier) et que les résultats du traitement puissent être transmis à un autre service.

Recommended Posts

[IBM Cloud] J'ai essayé d'accéder à la table Db2 on Cloud à partir de Cloud Funtions (python)
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
J'ai essayé de livrer du courrier depuis Node.js et Python en utilisant le service de livraison de courrier (SendGrid) d'IBM Cloud!
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
Essayez de piquer la base de données sur IBM i avec python + JDBC à l'aide de JayDeBeApi
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé Python sur Mac pour la première fois.
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé python pour la première fois avec heroku
Je voulais utiliser la bibliothèque Python de MATLAB
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé d'accéder aux feuilles de calcul Google en utilisant Python
J'ai essayé de résumer les opérations de chaîne de Python
Accéder à Oracle DB depuis Python
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé de reconnaître le visage de la vidéo (OpenCV: version python)
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai essayé d'énumérer les différences entre java et python
J'ai essayé de lancer le cluster ipython au minimum sur AWS
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai essayé de sortir le journal d'accès au serveur en utilisant Node.js
J'ai essayé d'afficher les données du groupe de points DB de la préfecture de Shizuoka avec Vue + Leaflet
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai essayé de résumer les langues que les débutants devraient désormais apprendre par but
J'ai essayé de prédire le genre de musique à partir du titre de la chanson sur le réseau neuronal récurrent
J'ai essayé AdaNet pour les données de table
J'ai essayé de toucher Python (installation)
Comment accéder à wikipedia depuis python
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
Mettre à jour Mac Python de 2 à 3
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé Python! ] Puis-je publier sur Kaggle sur iPad Pro?
Publier un message d'IBM Cloud Functions sur Slack en Python
J'ai essayé de numériser le tampon estampé sur papier en utilisant OpenCV
J'ai essayé d'enregistrer une station sur la plateforme IoT "Rimotte"
J'ai essayé de démarrer avec Bitcoin Systre le week-end
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (Partie 1)
J'ai essayé de résumer les remarques de tout le monde sur le slack avec wordcloud (Python)
J'ai essayé de couper une image fixe de la vidéo
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (partie 2)
Comment mettre à jour la version Python de Cloud Shell dans GCP
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai fait quelque chose avec python qui NOW LOADING se déplace de gauche à droite sur le terminal
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
À propos de l'erreur que j'ai rencontrée en essayant d'utiliser Adafruit_DHT à partir de Python sur Raspberry Pi
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
J'ai pu imprimer l'imprimante thermique "PAPERANG" depuis Python (Windows10, Python3.6)