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 MySQL) rien 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
Ressources :
0 commentaires:
Enregistrer un commentaire