【问题标题】:How to avoid DRY when inserting DataFrame within a class?在类中插入 DataFrame 时如何避免 DRY?
【发布时间】:2022-01-24 11:24:29
【问题描述】:

我有以下代码:


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)

上面的示例有效,但您可以看到我重复了两次代码块。请问如何使用 init 中的 self.connection 在方法 vlozit_df 中创建 engine ?谢谢

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    您将在整个类中需要的变量,将它们全局存储或作为类变量存储,以便您可以再次访问它们。尝试硬编码更少的东西。硬编码会让你重复。

    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)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      相关资源
      最近更新 更多