
    Af                         d Z ddlZddlZddlZddlZddlZ ej        e	          Z
d Zd Zd Zd Zd Zdd	Zd
 Ze	dk    r e             dS dS )z?
Created on Thu Apr  7 13:10:44 2022

@author: MarkvanKruistum
    Nc                 :   t          j        d          }t          j        t          j                  }|                    t           j                   |                    |           |                     |           |                     t           j                   dS )z
    Initialize logging formatter and handlers.
    Set logging levels.

    Parameters
    ----------
    logger : logging.Logger
        Logger object to use.

    Returns
    -------
    None.
    zP%(asctime)s - %(name)s - %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]N)	logging	FormatterStreamHandlersysstdoutsetLevelDEBUGsetFormatter
addHandler)logger	formatterhandlers      Qc:\Users\BasNoordhoorn\OneDrive - Kurtosis\Documenten\vensters\data_read_write.pyinit_loggingr      s     !"tuuI#CJ//GW]######
g
OOGM"""""    c                 8   t                               d           t          j                    }	 |                    |            ||         d         }||         d         }||         d         }||         d         }n+# t
          $ r t                               d           Y dS w xY w	 t          j        d	                    ||||	                    }n+# t
          $ r t                               d
           Y dS w xY wt                               d           |S )a  
    Read database details from config file and create a database engine object.

    Parameters
    ----------
    config_path : str
        Path to the config file containing the database credentials.
    programme_name : str
        Name of the programme. Possible values are 'gemeenten', 'waterschappen', 'rbb'. This determines the database.

    Returns
    -------
    engine : sqlachemy.engine.Engine
        SQLAlchemy Engine object with which connections to the database can be made.
    z,Getting database details from config file...serverdatabaseuserpasswordzReading config file failedNz5mysql+pymysql://{user}:{password}@{server}/{database})r   r   r   r   z:Creating database connection from connection string failedz'Database connection created succesfully)
r   debugconfigparserConfigParserread	Exception	exceptionsqlcreate_engineformat)config_pathprogramme_nameconfigr   r   r   r   engines           r   create_db_connectionr%   &   sI   " LL?@@@&((FK   '1.)*5n%f-.)*5   5666"#Z#a#agkv~  HN  Ya#a  $b  $b  c  c   UVVV LL:;;;Ms$   AA= =$B%$B%)+C $C=<C=c                     g }|D ]-}t          j        | |          }|                    |           .t          j        |          }|S )N)
sheet_name)pd
read_excelappendconcat)pathsheetsdf_listsheetdfs        r   read_excel_filer1   L   sS    G  ]4e444r	7		BIr   c                     t                               d           	 t          j        | |          }n+# t          $ r t                               d           Y d S w xY wt                               d           |S )NzReading table from database...z&Reading table from the database failedz(Dataframe read from database succesfully)r   r   r(   read_sqlr   r   )
table_namer$   r0   s      r   read_from_dbr5   T   s~    
LL1222[V,,   ABBB LL;<<<Is   2 $AAc                 z    | j         j                            d                    |          dd          | _         | S )Nzi{}. T)regex)columnsstrreplacer    )r0   years     r   remove_icoder=   `   s3    ''d(;(;Rt'LLBJIr   Tc                 P   |rdnd}t                               d           ||j        rt                               d           dS 	 |                    || d|           n+# t
          $ r t                               d           Y dS w xY wt                               d	           dS )
a  
    Write a specified DataFrame to a specified table in the database. 
    Can contain an append parameter indicating if rows should be appended or replaced.

    Parameters
    ----------
    engine : sqlachemy.engine.Engine
        SQLAlchemy Engine object with which connections to the database can be made.
    table_name : str
        Table name that the rows in the DataFrame are to be written to.
    df : DataFrame
        DataFrame containing rows to write to the database.
    append : boolean, optional
        Specifies if rows should be appended or replaced. The default is True (append).

    Returns
    -------
    None.
    r*   r;   z Writing dataframe to database...NzEmpty or no dataframe given!F)index	if_existsz#Writing rows to the database failedz)Dataframe written to database succesfully)r   r   emptyerrorto_sqlr   r   )r$   r4   r0   r*   modes        r   write_to_dbrE   d   s    * ,889D
LL3444	zRXz3444
		*fET	BBBB   >??? LL<=====s   A! !$B	B	c                  $    t          d           d S )Nz.Run one of the runners to read and write data!)print r   r   mainrI      s    	
:;;;;;r   __main__)T)__doc__r   pandasr(   
sqlalchemyr   r   r   	getLogger__name__r   r   r%   r1   r5   r=   rE   rI   rH   r   r   <module>rP      s                  



		8	$	$# # #*$ $ $L  
 
 
  #> #> #> #>J< < < zDFFFFF r   