Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
docs:dev:api:python:quickstart [2023/06/13 13:42] florian [Classe sql_db] |
docs:dev:api:python:quickstart [2024/05/14 15:33] (Version actuelle) florian |
||
|---|---|---|---|
| Ligne 8: | Ligne 8: | ||
| Le module db_common propose des fonction utilitaires pour effectuer des requêtes sur la base de données. | Le module db_common propose des fonction utilitaires pour effectuer des requêtes sur la base de données. | ||
| + | === Lire plusieurs lignes === | ||
| + | |||
| + | Nous allons utiliser la fonction ''dbgenericgetrows()'' dont la signature est la suivante: | ||
| + | |||
| + | <code python> | ||
| + | def dbgenericgetrows(usession, itbl, icond=None, ifldorder=None, ifldordersens="A", limit=None, limistart = 0) | ||
| + | """ | ||
| + | Return rows from a table. Select all the fields. | ||
| + | |||
| + | :type usession: session | ||
| + | :param usession: NCHP Session | ||
| + | :type itbl: string | ||
| + | :param itbl: table to fetch | ||
| + | :type icond : list | ||
| + | :param icond: list of conditions | ||
| + | |||
| + | :rtype: list | ||
| + | :return: A list of row, each row described by a dictionnary. | ||
| + | """ | ||
| + | </code> | ||
| + | |||
| + | Exemple d'utilisation pour sélectionner toutes les lignes de la table ''test'' | ||
| + | |||
| + | <code python> | ||
| + | rows = db_common.dbgenericgetrows( | ||
| + | usession = gses, | ||
| + | itbl = "factfour", | ||
| + | ) | ||
| + | |||
| + | pprint.pprint(rows) | ||
| + | >>> | ||
| + | [{ | ||
| + | 'FACTFOUR_CPPID': 0L, | ||
| + | 'FACTFOUR_DATE': datetime.datetime(2022, 6, 10, 11, 59, 55), | ||
| + | 'FACTFOUR_DATEDEPOTSAE': None, | ||
| + | 'FACTFOUR_DATEFACT': datetime.datetime(2016, 9, 29, 0, 0), | ||
| + | 'FACTFOUR_DEPOTSAE': 0, | ||
| + | 'FACTFOUR_FOURNISSEURID': 36L, | ||
| + | 'FACTFOUR_HT': 1350.0, | ||
| + | 'FACTFOUR_ID': 13L, | ||
| + | 'FACTFOUR_NUMFACTURE': 'QUAL_00000000003821', | ||
| + | 'FACTFOUR_TTC': 1620.0, | ||
| + | 'FACTFOUR_TVA': 270.0 | ||
| + | }, { | ||
| + | 'FACTFOUR_CPPID': 0L, | ||
| + | 'FACTFOUR_DATE': datetime.datetime(2022, 6, 10, 14, 36, 39), | ||
| + | 'FACTFOUR_DATEDEPOTSAE': datetime.datetime(2022, 6, 10, 14, 45, 14), | ||
| + | 'FACTFOUR_DATEFACT': datetime.datetime(2016, 9, 29, 0, 0), | ||
| + | 'FACTFOUR_DEPOTSAE': 1, | ||
| + | 'FACTFOUR_FOURNISSEURID': 36L, | ||
| + | 'FACTFOUR_HT': 1350.0, | ||
| + | 'FACTFOUR_ID': 14L, | ||
| + | 'FACTFOUR_NUMFACTURE': 'QUAL_00000000003821', | ||
| + | 'FACTFOUR_TTC': 1620.0, | ||
| + | 'FACTFOUR_TVA': 270.0 | ||
| + | }, { | ||
| + | 'FACTFOUR_CPPID': 380066452L, | ||
| + | 'FACTFOUR_DATE': None, | ||
| + | 'FACTFOUR_DATEDEPOTSAE': None, | ||
| + | 'FACTFOUR_DATEFACT': None, | ||
| + | 'FACTFOUR_DEPOTSAE': 0, | ||
| + | 'FACTFOUR_FOURNISSEURID': 0L, | ||
| + | 'FACTFOUR_HT': 0.0, | ||
| + | 'FACTFOUR_ID': 15L, | ||
| + | 'FACTFOUR_NUMFACTURE': '0', | ||
| + | 'FACTFOUR_TTC': 0.0, | ||
| + | 'FACTFOUR_TVA': 0.0 | ||
| + | } | ||
| + | ] | ||
| + | |||
| + | </code> | ||
| + | |||
| + | Un exemple maintenant en ajoutant des conditions | ||
| + | |||
| + | <code python> | ||
| + | rows = db_common.dbgenericgetrows( | ||
| + | usession = gses, | ||
| + | itbl = "factfour", | ||
| + | icond = db_common.buildcondandor( | ||
| + | tbl = "factfour", | ||
| + | fields = ["FACTFOUR_CPPID", "FACTFOUR_DEPOTSAE"], | ||
| + | values = ["0", "1"] | ||
| + | ) | ||
| + | ) | ||
| + | |||
| + | pprint.pprint(rows) | ||
| + | >>> | ||
| + | [{ | ||
| + | 'FACTFOUR_CPPID': 0L, | ||
| + | 'FACTFOUR_DATE': datetime.datetime(2022, 6, 10, 11, 59, 55), | ||
| + | 'FACTFOUR_DATEDEPOTSAE': None, | ||
| + | 'FACTFOUR_DATEFACT': datetime.datetime(2016, 9, 29, 0, 0), | ||
| + | 'FACTFOUR_DEPOTSAE': 0, | ||
| + | 'FACTFOUR_FOURNISSEURID': 36L, | ||
| + | 'FACTFOUR_HT': 1350.0, | ||
| + | 'FACTFOUR_ID': 13L, | ||
| + | 'FACTFOUR_NUMFACTURE': 'QUAL_00000000003821', | ||
| + | 'FACTFOUR_TTC': 1620.0, | ||
| + | 'FACTFOUR_TVA': 270.0 | ||
| + | } | ||
| + | ] | ||
| + | </code> | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | La fonction ''db_common.buildcondandor(...)'' qui est utilisée pour construire les conditions | ||
| + | ne gère que des conditions utilisant le même opérateur qui par défaut est l'opérateur ''=''. | ||
| + | </WRAP> | ||
| + | |||
| + | === Insérer une ligne === | ||
| + | |||
| + | On utilise la fonction ''dbgenericinsert()'' dont la signature est la suivante: | ||
| + | |||
| + | <code python> | ||
| + | def dbgenericinsert(usession, itbl, iflds, ivalues, dbtype = None): | ||
| + | """ | ||
| + | Generic function to insert a record in a system table and get its primary key. | ||
| + | |||
| + | > ret = db_common.dbgenericinsert(session, "test", ["fld1", "fld2", "fldx"], [1, 2, 'foo']) | ||
| + | Execute query : insert into test (fld1,fld2,fldx) values (1,2,'foo'); ret contains new generated ID | ||
| + | |||
| + | :type usession: session | ||
| + | :param usession: NCHP Session | ||
| + | :type itbl: string | ||
| + | :param itbl: table to fetch | ||
| + | :type iflds: list | ||
| + | :param iflds: fields to put values in | ||
| + | :type ivalues: list | ||
| + | :param ivalues: Values to put in fields | ||
| + | :type dbtype: string | ||
| + | :param dbtype: database type | ||
| + | |||
| + | :rtype: long | ||
| + | :return: new ID of record, or 0 if insert failed. | ||
| + | """ | ||
| + | </code> | ||
| + | |||
| + | Voici un exemple: | ||
| + | |||
| + | <code python> | ||
| + | new_rsid = db_common.dbgenericinsert( | ||
| + | usession = gses, | ||
| + | itbl = "client", | ||
| + | iflds = ["CLIENT_NUMERO", "CLIENT_NOM"], | ||
| + | ivalues = ["123456", "Client 123456"] | ||
| + | ) | ||
| + | |||
| + | if new_rsid <= 0: | ||
| + | print("Error code :{}, error msg: {}".format(gses.db.db_errorcode, gses.db.db_errormsg)) | ||
| + | |||
| + | </code> | ||
| + | |||
| + | Il est important de tester le retour afin de s'assurer que l'insertion a bien été faite et sinon | ||
| + | on peut récupérer le code d'erreur et le message retourné par la base de données via ''gses.db.db_errorcode'' et ''gses.db.db_errormsg'' | ||
| ==== Classe sql_db ==== | ==== Classe sql_db ==== | ||
| Ligne 31: | Ligne 184: | ||
| result = gses.db.query("SELECT * FROM societycache;") | result = gses.db.query("SELECT * FROM societycache;") | ||
| - | with result: | + | if result is not None: |
| - | for row in result: | + | with result: |
| - | print(row) | + | for row in result: |
| + | print(row) | ||
| </code> | </code> | ||
| Ligne 76: | Ligne 230: | ||
| ''_common'' est un module python EzGED qui contient de nombreuses fonctions utiles et globalement utilisées dans toute l'application. Dont notamment la fonction ''get_logger()'' | ''_common'' est un module python EzGED qui contient de nombreuses fonctions utiles et globalement utilisées dans toute l'application. Dont notamment la fonction ''get_logger()'' | ||
| - | ===== Journaliser les activiés ===== | + | ===== Journaliser les activités ===== |
| Dans EzGED un certain nombre d'entités tels que les fiches descriptives ou les fiches sont l'objet d'activités ou d'évènements. | Dans EzGED un certain nombre d'entités tels que les fiches descriptives ou les fiches sont l'objet d'activités ou d'évènements. | ||
| Ligne 190: | Ligne 344: | ||
| </code> | </code> | ||
| - | ==== Créer une nouvelle version d'un fichier ==== | + | ==== Obtenir les fichiers d'une fiche ==== |
| + | |||
| + | Nous avons besoin d'importer le module suivant | ||
| + | <code python> | ||
| + | import docpak | ||
| + | </code> | ||
| + | |||
| + | Nous avons ensuite besoin de deux informations: | ||
| + | * Le nom de la table documentaire. | ||
| + | * L'identifiant d'enregistrement de la fiche. | ||
| + | |||
| + | <code python> | ||
| + | fichiers = docpak.getfilesforrsid(gses, "contratsm", 81) | ||
| + | |||
| + | print(fichiers) | ||
| + | [ | ||
| + | ('D:\\nchp\\var\\nchp\\instance\\EMDOM\\DEFTSA\\00000013\\ed\\4d\\4RGETML2.pdf','contrat_4201.pdf') | ||
| + | ] | ||
| + | </code> | ||
| + | |||
| + | Le même appel avec l'option moreinfo=True | ||
| + | <code python> | ||
| + | fichiers = docpak.getfilesforrsid(gses, "contratsm", 81) | ||
| + | |||
| + | print(fichiers) | ||
| + | |||
| + | [('D:\\nchp\\var\\nchp\\instance\\EMDOM\\DEFTSA\\00000013\\ed\\4d\\4RGETML2.pdf', | ||
| + | 'contrat_4201.pdf', | ||
| + | 22864L, #Identifiant du fichier | ||
| + | 'ed4d2b8b04b3b1861a450b35210114c75ebae4dc', #Empreinte md160 du fichier | ||
| + | 'application/pdf', #Type mime | ||
| + | 1L #Rang du fichier | ||
| + | ) | ||
| + | ] | ||
| + | |||
| + | </code> | ||
| + | |||
| + | ===== Scripts COLD ===== | ||
| + | |||
| + | ==== Lire un fichier d'état (scriptfile) ==== | ||