在类中插入DataFrame时,如何避免DRY



我有以下代码:


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?感谢

您将在整个类中需要的变量,将它们全局存储或作为类变量存储,以便您可以再次访问它们。尽量少硬编码。硬编码会导致重复。

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)

最新更新