58 votes

sqlalchemy ORM : comment déclarer une classe de table qui contient une clé primaire multi-colonnes ?

Les colonnes de la clé primaire doivent être dans un ordre précis.

Je vois du code dans le document :

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer)

    __mapper_args__ = {
        'primary_key':[id]
    }

Mais cela ne fonctionne pas (j'utilise mysql, et la clé primaire id ne sera pas générée). Y a-t-il des solutions possibles ?

94voto

Denis Otkidach Points 13111

Dans le cas où les colonnes sont déclarées dans le même ordre qu'elles devraient être dans la clé primaire :

class User(Base):
    field1 = Column(Integer, primary_key=True)
    field2 = Column(Integer, primary_key=True)

Sinon, déclarez-le dans __table_args__ :

class User(Base):
    field1 = Column(Integer)
    field2 = Column(Integer)
    __table_args__ = (
        PrimaryKeyConstraint(field2, field1),
        {},
    )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X