@@ -440,359 +440,6 @@ def build_network(self, network=None, *args, **kwargs):
440440 return network
441441
442442
443- def clear_results_db (session ):
444- """Used to clear the result tables in the OEDB. Caution!
445- This deletes EVERY RESULT SET!"""
446-
447- from egoio .db_tables .model_draft import (
448- EgoGridPfHvResultBus as BusResult ,
449- EgoGridPfHvResultBusT as BusTResult ,
450- EgoGridPfHvResultGenerator as GeneratorResult ,
451- EgoGridPfHvResultGeneratorT as GeneratorTResult ,
452- EgoGridPfHvResultLine as LineResult ,
453- EgoGridPfHvResultLineT as LineTResult ,
454- EgoGridPfHvResultLoad as LoadResult ,
455- EgoGridPfHvResultLoadT as LoadTResult ,
456- EgoGridPfHvResultMeta as ResultMeta ,
457- EgoGridPfHvResultStorage as StorageResult ,
458- EgoGridPfHvResultStorageT as StorageTResult ,
459- EgoGridPfHvResultTransformer as TransformerResult ,
460- EgoGridPfHvResultTransformerT as TransformerTResult ,
461- )
462-
463- print ("Are you sure that you want to clear all results in the OEDB?" )
464- choice = ""
465- while choice not in ["y" , "n" ]:
466- choice = input ("(y/n): " )
467- if choice == "y" :
468- print ("Are you sure?" )
469- choice2 = ""
470- while choice2 not in ["y" , "n" ]:
471- choice2 = input ("(y/n): " )
472- if choice2 == "y" :
473- print ("Deleting all results..." )
474- session .query (BusResult ).delete ()
475- session .query (BusTResult ).delete ()
476- session .query (StorageResult ).delete ()
477- session .query (StorageTResult ).delete ()
478- session .query (GeneratorResult ).delete ()
479- session .query (GeneratorTResult ).delete ()
480- session .query (LoadResult ).delete ()
481- session .query (LoadTResult ).delete ()
482- session .query (LineResult ).delete ()
483- session .query (LineTResult ).delete ()
484- session .query (TransformerResult ).delete ()
485- session .query (TransformerTResult ).delete ()
486- session .query (ResultMeta ).delete ()
487- session .commit ()
488- else :
489- print ("Deleting aborted!" )
490- else :
491- print ("Deleting aborted!" )
492-
493-
494- def results_to_oedb (session , network , args , grid = "hv" , safe_results = False ):
495- """Return results obtained from PyPSA to oedb
496-
497- Parameters
498- ----------
499- session:
500- network : PyPSA network container
501- Holds topology of grid including results from powerflow analysis
502- args: dict
503- Settings from appl.py
504- grid: str
505- Choose voltage-level, currently only 'hv' implemented
506- safe_results: boolean
507- If it is set to 'True' the result set will be saved
508- to the versioned grid schema eventually apart from
509- being saved to the model_draft by a SQL-script.
510- ONLY set to True if you know what you are doing.
511-
512- """
513- # Update generator_ids when k_means clustering to get integer ids
514- if args ["network_clustering_kmeans" ]:
515- new_index = pd .DataFrame (index = network .generators .index )
516- new_index ["new" ] = range (len (network .generators ))
517-
518- for col in network .generators_t :
519- if not network .generators_t [col ].empty :
520- network .generators_t [col ].columns = new_index .new [
521- network .generators_t [col ].columns
522- ]
523-
524- network .generators .index = range (len (network .generators ))
525-
526- # moved this here to prevent error when not using the mv-schema
527- import datetime
528-
529- if grid .lower () == "mv" :
530- print ("MV currently not implemented" )
531- elif grid .lower () == "hv" :
532- from egoio .db_tables .model_draft import (
533- EgoGridPfHvResultBus as BusResult ,
534- EgoGridPfHvResultBusT as BusTResult ,
535- EgoGridPfHvResultGenerator as GeneratorResult ,
536- EgoGridPfHvResultGeneratorT as GeneratorTResult ,
537- EgoGridPfHvResultLine as LineResult ,
538- EgoGridPfHvResultLineT as LineTResult ,
539- EgoGridPfHvResultLoad as LoadResult ,
540- EgoGridPfHvResultLoadT as LoadTResult ,
541- EgoGridPfHvResultMeta as ResultMeta ,
542- EgoGridPfHvResultStorage as StorageResult ,
543- EgoGridPfHvResultStorageT as StorageTResult ,
544- EgoGridPfHvResultTransformer as TransformerResult ,
545- EgoGridPfHvResultTransformerT as TransformerTResult ,
546- EgoGridPfHvSource as Source ,
547- )
548- else :
549- print ("Please enter mv or hv!" )
550-
551- print ("Uploading results to db..." )
552- # get last result id and get new one
553- last_res_id = session .query (max (ResultMeta .result_id )).scalar ()
554- if last_res_id is None :
555- new_res_id = 1
556- else :
557- new_res_id = last_res_id + 1
558-
559- # result meta data
560- res_meta = ResultMeta ()
561- meta_misc = []
562- for arg , value in args .items ():
563- if arg not in dir (res_meta ) and arg not in [
564- "db" ,
565- "lpfile" ,
566- "results" ,
567- "export" ,
568- ]:
569- meta_misc .append ([arg , str (value )])
570-
571- res_meta .result_id = new_res_id
572- res_meta .scn_name = args ["scn_name" ]
573- res_meta .calc_date = datetime .datetime .now ()
574- res_meta .user_name = args ["user_name" ]
575- res_meta .method = args ["method" ]
576- res_meta .start_snapshot = args ["start_snapshot" ]
577- res_meta .end_snapshot = args ["end_snapshot" ]
578- res_meta .safe_results = safe_results
579- res_meta .snapshots = network .snapshots .tolist ()
580- res_meta .solver = args ["solver" ]
581- res_meta .settings = meta_misc
582-
583- session .add (res_meta )
584- session .commit ()
585-
586- # get source_id
587- sources = pd .read_sql (session .query (Source ).statement , session .bind )
588- for gen in network .generators .index :
589- if network .generators .carrier [gen ] not in sources .name .values :
590- new_source = Source ()
591- new_source .source_id = (
592- session .query (max (Source .source_id )).scalar () + 1
593- )
594- new_source .name = network .generators .carrier [gen ]
595- session .add (new_source )
596- session .commit ()
597- sources = pd .read_sql (
598- session .query (Source ).statement , session .bind
599- )
600- try :
601- old_source_id = int (
602- sources .source_id [
603- sources .name == network .generators .carrier [gen ]
604- ]
605- )
606- network .generators .set_value (gen , "source" , int (old_source_id ))
607- except :
608- print (
609- "Source "
610- + network .generators .carrier [gen ]
611- + " is not in the source table!"
612- )
613- for stor in network .storage_units .index :
614- if network .storage_units .carrier [stor ] not in sources .name .values :
615- new_source = Source ()
616- new_source .source_id = (
617- session .query (max (Source .source_id )).scalar () + 1
618- )
619- new_source .name = network .storage_units .carrier [stor ]
620- session .add (new_source )
621- session .commit ()
622- sources = pd .read_sql (
623- session .query (Source ).statement , session .bind
624- )
625- try :
626- old_source_id = int (
627- sources .source_id [
628- sources .name == network .storage_units .carrier [stor ]
629- ]
630- )
631- network .storage_units .set_value (stor , "source" , int (old_source_id ))
632- except :
633- print (
634- "Source "
635- + network .storage_units .carrier [stor ]
636- + " is not in the source table!"
637- )
638-
639- whereismyindex = {
640- BusResult : network .buses .index ,
641- LoadResult : network .loads .index ,
642- LineResult : network .lines .index ,
643- TransformerResult : network .transformers .index ,
644- StorageResult : network .storage_units .index ,
645- GeneratorResult : network .generators .index ,
646- BusTResult : network .buses .index ,
647- LoadTResult : network .loads .index ,
648- LineTResult : network .lines .index ,
649- TransformerTResult : network .transformers .index ,
650- StorageTResult : network .storage_units .index ,
651- GeneratorTResult : network .generators .index ,
652- }
653-
654- whereismydata = {
655- BusResult : network .buses ,
656- LoadResult : network .loads ,
657- LineResult : network .lines ,
658- TransformerResult : network .transformers ,
659- StorageResult : network .storage_units ,
660- GeneratorResult : network .generators ,
661- BusTResult : network .buses_t ,
662- LoadTResult : network .loads_t ,
663- LineTResult : network .lines_t ,
664- TransformerTResult : network .transformers_t ,
665- StorageTResult : network .storage_units_t ,
666- GeneratorTResult : network .generators_t ,
667- }
668-
669- new_to_old_name = {
670- "p_min_pu_fixed" : "p_min_pu" ,
671- "p_max_pu_fixed" : "p_max_pu" ,
672- "dispatch" : "former_dispatch" ,
673- "current_type" : "carrier" ,
674- "soc_cyclic" : "cyclic_state_of_charge" ,
675- "soc_initial" : "state_of_charge_initial" ,
676- }
677-
678- ormclasses = [
679- BusResult ,
680- LoadResult ,
681- LineResult ,
682- TransformerResult ,
683- GeneratorResult ,
684- StorageResult ,
685- BusTResult ,
686- LoadTResult ,
687- LineTResult ,
688- TransformerTResult ,
689- GeneratorTResult ,
690- StorageTResult ,
691- ]
692-
693- for ormclass in ormclasses :
694- for index in whereismyindex [ormclass ]:
695- myinstance = ormclass ()
696- columns = ormclass .__table__ .columns .keys ()
697- columns .remove ("result_id" )
698- myinstance .result_id = new_res_id
699- for col in columns :
700- if "_id" in col :
701- class_id_name = col
702- else :
703- continue
704- setattr (myinstance , class_id_name , index )
705- columns .remove (class_id_name )
706-
707- if str (ormclass )[:- 2 ].endswith ("T" ):
708- for col in columns :
709- if col == "soc_set" :
710- try :
711- setattr (
712- myinstance ,
713- col ,
714- getattr (
715- whereismydata [ormclass ],
716- "state_of_charge_set" ,
717- )[index ].tolist (),
718- )
719- except :
720- pass
721- else :
722- try :
723- setattr (
724- myinstance ,
725- col ,
726- getattr (whereismydata [ormclass ], col )[
727- index
728- ].tolist (),
729- )
730- except :
731- pass
732- session .add (myinstance )
733-
734- else :
735- for col in columns :
736- if col in new_to_old_name :
737- if col == "soc_cyclic" :
738- try :
739- setattr (
740- myinstance ,
741- col ,
742- bool (
743- whereismydata [ormclass ].loc [
744- index , new_to_old_name [col ]
745- ]
746- ),
747- )
748- except :
749- pass
750- elif "Storage" in str (ormclass ) and col == "dispatch" :
751- try :
752- setattr (
753- myinstance ,
754- col ,
755- whereismydata [ormclass ].loc [index , col ],
756- )
757- except :
758- pass
759- else :
760- try :
761- setattr (
762- myinstance ,
763- col ,
764- whereismydata [ormclass ].loc [
765- index , new_to_old_name [col ]
766- ],
767- )
768- except :
769- pass
770- elif col in ["s_nom_extendable" , "p_nom_extendable" ]:
771- try :
772- setattr (
773- myinstance ,
774- col ,
775- bool (whereismydata [ormclass ].loc [index , col ]),
776- )
777- except :
778- pass
779- else :
780- try :
781- setattr (
782- myinstance ,
783- col ,
784- whereismydata [ormclass ].loc [index , col ],
785- )
786- except :
787- pass
788- session .add (myinstance )
789-
790- session .commit ()
791- print ("Upload finished!" )
792-
793- return
794-
795-
796443def run_sql_script (conn , scriptname = "results_md2grid.sql" ):
797444 """This function runs .sql scripts in the folder 'sql_scripts'"""
798445
0 commit comments