Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to avoid DRY when inserting DataFrame within a class?

I have a following code:


class DatabaseG:
    def __init__(self):        
            config.read("config.ini")
            self.connection = mysql.connect(
                user=config["knihy"]["user"],
                passwd=config["knihy"]["password"],
                host=config["knihy"]["host"],
                db=config["knihy"]["database"],
            )
            self.cursor = self.connection.cursor()
            query = """
                CREATE TABLE IF NOT EXISTS KNIHY (id TEXT, blabla TEXT)
                """
            self.cursor.execute("""SHOW TABLES LIKE 'KNIHY'""")

    def vlozit_df(self, my_df):
        if not my_df.empty:
            config = ConfigParser()
            config.read("config.ini")

            user = config["knihy"]["user"]
            passwd = config["knihy"]["password"]
            host = config["knihy"]["host"]
            db = config["knihy"]["database"]

            engine = create_engine(
                f"mysql+pymysql://{user}:{passwd}@{host}/{db}?charset=utf8mb4"
            )
            con = engine.connect()
            my_df.to_sql("KNIHY", con=con, if_exists="append", index=False)

Example above works, but you can see that I repeat block of code twice. How can I create engine in the method vlozit_df using self.connection from init , please? Thanks

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

The variables that you are going to need throughout the class, store them either globally or as a class variable so that you can access them again. Try to hardcode less stuff. Hardcoding causes you to repeat.

class DatabaseG:
    def __init__(self,file):
        config = ConfigParser()
        config.read(file)
        self.user = config["knihy"]["user"]
        self.password = config["knihy"]["password"]
        self.database = config["knihy"]["database"]
        self.host = config["knihy"]["host"]
        

    def vlozit_df(self, my_df,tablename,mode):
        if not my_df.empty:

            engine = create_engine(
                "mysql+pymysql://{user}:{password}@{host}/{db}?charset=utf8mb4".format(
                    user=self.user, password=self.password, host=self.host,db=self.database
                )
            )
            con = engine.connect()
            my_df.to_sql(tablename, con=con, if_exists=mode, index=False)
            
    def runQuery(self, query):
        self.connection = mysql.connect(
            user=self.user,
            passwd=self.password,
            host=self.host,
            db=self.database,
        )
        self.cursor = self.connection.cursor()
      
        self.cursor.execute(query)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading