Jak utworzyć tabelę za pomocą ORM Klasy deklaratywnej bez klucza podstawowego? Nie udało się uruchomić, jeśli nie zrobiłem żadnej kolumny primary_key = True
.Deklaracja SQLAlchemy: tabela bez kluczy podstawowych?
Odpowiedz
SQLAlchemy core nie narzeka na brakujący klucz podstawowy, więc istnieje możliwość utworzenia takiej tabeli z Table(…)
. Jednak ORM według projektu wymaga sposobu identyfikacji wiersza odpowiadającego obiektowi, więc nie można używać tabeli bez klucza podstawowego w ORM.
Dlaczego musisz dodać ten indeks później? Czy to rzeczywisty wymóg, czy próba rozwiązania jakiegoś problemu, który prawdopodobnie można rozwiązać w inny sposób? W przypadku, gdy potrzebny jest złożony klucz podstawowy, można go zdefiniować za pomocą argumentu primary_key=True
w kilku s kach Column
lub podając PrimaryKeyConstraint(…)
w __table_args__
.
Zamierzam utworzyć indeks z wieloma kolumnami. Byłoby świetnie, gdybym mógł jednoznacznie oświadczyć, że indeks musi być skonstruowany przy pomocy BTREE (moja baza to MySQL). Jakieś rozwiązania? – Determinant
Większość baz danych (w tym MySQL) używa domyślnie drzewa B-tree, więc po prostu określ "primary_key = True" we wszystkich "kolumnach" uczestniczących w indeksie złożonym. Jawna specyfikacja B-Tree (lub innego typu) jest obsługiwana w 'Index (...)' np. dla PostgreSQL, ale nie dla MySQL, a nie w "PrimaryKeyConstraint". Wygląda na brakującą funkcję w SQLAlchemy. –
możesz również umieścić listę kolumn, które są "pierwotne" w argumencie "primary_key" dla programu odwzorowującego(), z deklaratywnym '__mapper_args__ = {" primary_key ":(col1, col2)}}' – zzzeek
czy mogę zapytać, dlaczego chciałbyś zrobić coś takiego? –
@ JonathanOng Ponieważ chciałbym dodać niektóre indeksy później i wygląda na to, że mysql może zrobić coś takiego. – Determinant