Python如何在课堂上使用装饰器?

问题描述 投票:0回答:0
class Database:
    def __inti__(self, url: str):
        self.url = url
    
    def connect_db(self, callback):
            
        def connection(self, *args, **kwargs):
            engine = create_engine(self.url)
            conn = engine.connect()
            query = callback(conn)
            conn.close()
            return query
        
        return connection
    
    @connect_db
    def data_from_DB(self, conn, sql):
        query = conn.excute(text(sql)).fetchall()
        df = pd.DataFrame(query)
        return df



if __name__ == '__main__':
    url = 'mysql+mypysql://~~~'
    sql = 'SELECT * FROM table'
    data = Database(url)
    df = data.data_from_DB(sql=sql)
    print(df)

我试图用装饰器执行代码。但是,它没有用。错误信息如下。

Traceback (most recent call last):
  File "c:\Users\82102\Documents\programming\project\economy\temp.py", line 9, in <module>
    class Database:
  File "c:\Users\82102\Documents\programming\project\economy\temp.py", line 24, in Database
    @connect_db
     ^^^^^^^^^^
TypeError: Database.connect_db() missing 1 required positional argument: 'callback'

我不明白哪里出了问题,因为我以为我没有做错语法。

python python-decorators
© www.soinside.com 2019 - 2024. All rights reserved.