Динамическое создание атрибутов
Есть в БД таблица с настройками, в виде пары '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) # +++