SQLAlchemy Column to Row Transformation i vice versa - czy to możliwe?

Szukam tylko rozwiązania SQLAlchemy do konwersji dyktatu otrzymanego z przesłanego formularza na szereg wierszy w bazie danych, po jednym dla każdego przesłanego pola. Ma to na celu obsługę preferencji i ustawień, które różnią się znacznie w zależności od aplikacji. Ale jest bardzo prawdopodobne, że będzie to miało zastosowanie do tworzenia funkcji w postaci tabeli przestawnej. Widziałem tego typu rzeczy w narzędziach ETL, ale szukałem sposobu, aby to zrobić bezpośrednio w ORM. Nie mogłem znaleźć żadnej dokumentacji na ten temat, ale może coś przeoczyłem.

Przykład:

Przesłano z formularza: {"UniqueId": 1, "a": 23, "b": "Hello", "c": "World"}

Chciałbym, aby został przekształcony (w ORM) tak, aby był zapisywany w bazie danych w ten sposób:

_______________________________________
|UniqueId| ItemName   | ItemValue     |
---------------------------------------
|  1     |    a       |    23         |
---------------------------------------
|  1     |    b       |    Hello      |
---------------------------------------
|  1     |    c       |    World      |
---------------------------------------

Po wybraniu wynik zostanie przekształcony (w ORM) z powrotem w wiersz danych z każdej z indywidualnych wartości.

---------------------------------------------------
| UniqueId  |  a     |     b      |       c       |

---------------------------------------------------
|   1       |  23    |   Hello    |   World       |

---------------------------------------------------

Przy aktualizacji chciałbym założyć, że najlepszym sposobem postępowania byłoby zawinięcie kasowania / tworzenia w transakcji, aby bieżące rekordy zostały usunięte, a nowe dodane.

Ostateczna lista ItemNames będzie przechowywana w osobnej tabeli.

Całkowicie otwarty na bardziej eleganckie rozwiązania, ale chciałby trzymać się z dala od bazy danych, jeśli to możliwe.

Używam podejścia declarative_base z SQLAlchemy.

Z góry dziękuję...

Twoje zdrowie,

Paweł

questionAnswers(1)

yourAnswerToTheQuestion