Come creare una tabella utilizzando la classe dichiarativa ORM senza chiave primaria? Non è riuscito a iniziare se non ho creato nessuna colonna il primary_key = True
.SQLAlchemy dichiarativo: tabella senza chiavi primarie?
risposta
SQLAlchemy core non si lamenta della mancanza della chiave primaria, quindi è possibile creare tale tabella con Table(…)
. Ma la progettazione ORM richiede un modo per identificare la riga corrispondente all'oggetto, quindi non è possibile utilizzare la tabella senza la chiave primaria in ORM.
Perché è necessario aggiungere questo indice in un secondo momento? È un requisito reale o un tentativo di risolvere qualche problema che probabilmente può essere risolto in altro modo? Nel caso sia necessaria la chiave primaria composta, è possibile definirla con l'argomento primary_key=True
in diversi Column
s o specificando PrimaryKeyConstraint(…)
in .
Intendo creare un indice a più colonne. Sarebbe bello se potessi dichiarare esplicitamente che l'indice deve essere costruito usando BTREE (il mio database è MySQL). Qualche soluzione? – Determinant
La maggior parte dei database (incluso MySQL) usa B-Tree di default, quindi basta specificare 'primary_key = True' in tutti i' Column's che partecipano all'indice composito. La specifica esplicita B-Tree (o altro tipo) è supportata in "Indice (...)" ad es. per PostgreSQL, ma non per MySQL e non in 'PrimaryKeyConstraint'. Sembra una funzionalità mancante in SQLAlchemy. –
puoi anche mettere l'elenco di colonne che sono "primarie" nell'argomento "primary_key" a mapper(), con dichiarativo '__mapper_args__ = {" primary_key ":(col1, col2)}}' – zzzeek
posso chiedere, perché vorresti fare una cosa del genere? –
@ JonathanOng Perché vorrei aggiungere alcuni indici in seguito, e sembra che mysql possa fare qualcosa del genere. – Determinant