2012-01-23 17 views
6

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?

+0

posso chiedere, perché vorresti fare una cosa del genere? –

+0

@ JonathanOng Perché vorrei aggiungere alcuni indici in seguito, e sembra che mysql possa fare qualcosa del genere. – Determinant

risposta

11

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 .

+0

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

+1

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. –

+6

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

Problemi correlati