Переходя от моего последнего вопроса.Я определил хорошо структурированное отношение «многие ко многим» между 3 таблицами.Я могу просто добавить пользовательскую ассоциацию, подобную этой
def setUserAssociation(**kwargs):
associations = {}
assoc = UserDevices() #Table object that stores all associations (see my last question)
try:
for table in kwargs:
validTables = ["Site", "User", "Device", "Role"]
if table not in validTables:
raise ValueError("Unknown table `" + table + "` must be " + str(validTables))
associations[table] = db.session.query(eval(k)).filter(eval(table).name==kwargs[table]).first()
if associations[table] is None:
raise ValueError("No " + table + " found with name `" + str(kwargs[table]) + "`")
setattr(assoc, table .lower(), associations[table])
db.session.add(assoc)
db.session.commit()
return SqlResponse(200, "Success")
except Exception as e:
print(e)
return SqlResponse(500, str(e))
Наконец добавить пользователя Anum
на сайте myHome
и назначить ему owner
Роль на устройстве myPlug
response = setUserAssociation(Site="myHome", User="Anum", Device="myPlug", Role="owner")
Достаточно хорошо!Теперь предположим, что у меня сложная таблица, структурированная как показано ниже:
Я хочу структурировать эту таблицу как объект Json или Dict.Я могу получить User Accociation List (UserDevice
тип объекта), когда я вызываю getUserAssociation
def getUserAssociation(userName):
user = db.session.query(User).filter(User.name == userName).first()
return user.user_devices
userAssoc = getUserAssociation("Anum")
for u in userAssoc:
print ("data: ", u.user.name, u.site.name, u.device.name, u.role.name)
Это дает мне список объектов UserDevice (для каждой строки).Конечно, я могу сделать свой собственный дикий метод, который создает json (как показано ниже) из вышеприведенных данных, НО ... есть ли другой простой способ сделать это?Может быть, SqlAlchemy уже предоставляет один?
{
"sites": [
{
"site": "myHome",
"devices": [
{
"device": "plug",
"users": [
"{'user': 'John', 'role': 'owner'}",
"{'user': 'Steve', 'role': 'writer'}"
]
},
{
"device": "fan",
"users": [
"{'user': 'Henry', 'role': 'manager'}",
"{'user': 'John', 'role': 'owner'}"
]
}
]
}
]
}