Динамическое создание атрибутов

Есть в БД таблица с настройками, в виде пары 'name' - 'value'. Хочется создать класс с настройками из этой таблицы, для удобного обращения к ним в приложении. с помощью make_dataclass создаю класс в цикле чтения из БД, но сохраняется только последняя пара значений. Не понимаю как сделать добавление атрибутов в цикле.

with connection:
    cursor = connection.cursor()
    retrive = "SELECT * FROM `settings`"

    cursor.execute(retrive)
    rows = cursor.fetchall()
    #i = 1
    for row in rows:
        id = "{0}".format(row[0], row[1], row[2], row[3])  # noqa: F523
        node = "{1}".format(row[0], row[1], row[2], row[3])  # noqa: F523
        name = "{2}".format(row[0], row[1], row[2], row[3])  # noqa: F523
        value = "{3}".format(row[0], row[1], row[2], row[3])  # noqa: F523

        fields = [(row[2], str, row[3])]
        settings = dataclasses.make_dataclass("settings", fields)
        #i += 1
conf = settings()
print(conf.a)

Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

import dataclasses

...

with connection:
    cursor = connection.cursor()
    retrive = "SELECT * FROM `settings`"

    cursor.execute(retrive)
    rows = cursor.fetchall()

    _settings = []                                                        # +++
    
    for row in rows:
        id = "{0}".format(row[0], row[1], row[2], row[3])  
        node = "{1}".format(row[0], row[1], row[2], row[3])  
        name = "{2}".format(row[0], row[1], row[2], row[3])  
        value = "{3}".format(row[0], row[1], row[2], row[3])  

        fields = [(row[2], str, row[3])]

#       settings = dataclasses.make_dataclass("settings", fields)
# ----> v <----------------------> v <-----------------------------------------
        Settings = make_dataclass("Settings", fields)
# ----> v <-----> v <----------------------------------------------------------        
        setting = Settings(...)                                           # +++
        _settings.append(setting)                                         # +++
    
#conf = settings()
#print(conf.a)
print(_settings)                                                          # +++
→ Ссылка