18 févr. 2022

[Dynamo += Python] Nomenclature vers Base SQL (via Pandas)

 






Exporter une nomenclature Revit vers une base SQL via Dynamo et Python ?


if this article is not in your language, use the Google Translate widget (bottom of page for Mobile version) 


Bien que Revit puisse nativement exporter des données via le plugin Autodesk Revit DB Link,



voici une alternative avec Dynamo et Python (moteur CPython3) pour ceux qui voudraient utiliser une autre méthode

Ici ne sera abordé que l'export vers une base SQL serveur (pas de ré-import)

J'utilise pour ce faire les bibliothèques Python suivantes :

  • Pandas 
  • pymysql
  • mysql-connector-python
  • sqlalchemy
Pour faire le serveur SQL (ici serveur MySQLrien de plus simple avec le logiciel Wampserver

 Concernant la conversion d'une nomenclature en Dataframe Pandas j'utilise une classe personnalisée (voir Article précédent)


Export de la Nomenclature (DataFrame) vers une table MySQL


import clr
import sys
import re
import System
reDir = System.IO.DirectoryInfo(re.__file__)
path_py3_lib = reDir.Parent.Parent.FullName
sys.path.append(path_py3_lib + r'Libsite-packages')
# pip install mysqlclient
# pip install pymysql
# pip install sqlalchemy
# pip install mysql-connector-python
import sqlalchemy as db
import mysql

WrapDFrame = IN[0] # import class          

viewschAllLvl = UnwrapElement(IN[1])
execute = IN[2]
if execute: 
    #
    # Set database credentials.
    creds = {'usr': 'root',
             'pwd': '',
             'hst': 'localhost',
             'prt': 3306,
             'dbn': 'powerbalance'}
    # MySQL conection string.
    connstr = 'mysql+mysqlconnector://{usr}:{pwd}@{hst}:{prt}/{dbn}'
    # Create sqlalchemy engine for MySQL connection.
    engine = db.create_engine(connstr.format(**creds))
    # create DataFrame 1
    objdfA = WrapDFrame(viewschAllLvl)
    # remove nan values
    dfC = objdfA.UnwrapDFrame.dropna()
    # export to sql
    dfC.to_sql(name='datasql', con=engine, if_exists = 'replace', index=False)
    OUT = engine


Lecture de la table MySQL depuis Dynamo


import clr
import sys
import re
import System
reDir = System.IO.DirectoryInfo(re.__file__)
path_py3_lib = reDir.Parent.Parent.FullName
sys.path.append(path_py3_lib + r'Libsite-packages')
# pip install mysqlclient
# pip install pymysql
# pip install sqlalchemy
# pip install mysql-connector-python
import sqlalchemy as db
import mysql
import pandas as pd
import numpy as np

WrapDFrame = IN[0] # import class          

execute = IN[1]
if execute: 
    #
    # Set database credentials.
    creds = {'usr': 'root',
             'pwd': '',
             'hst': 'localhost',
             'prt': 3306,
             'dbn': 'powerbalance'}
    # MySQL conection string.
    connstr = 'mysql+mysqlconnector://{usr}:{pwd}@{hst}:{prt}/{dbn}'
    # Create sqlalchemy engine for MySQL connection.
    engine = db.create_engine(connstr.format(**creds))

    # export to sql
    table_name = 'datasql'
    df = pd.read_sql("SELECT * FROM %s" % table_name, engine)
    objdfD = WrapDFrame(df)
    # view in Html
    objdfD.ToHTML()
    OUT = objdfD


En Vidéo

   




0 commentaires:

Enregistrer un commentaire