Unikalus sqlalchemy daugeliui stulpelių

Tarkime, kad turiu klasę, kuri atstovauja vietoms. Vietovės „priklauso“ klientams. Vietos identifikuojamos pagal Unicode simbolių kodą 10. Vietovės kodas turi būti unikalus tarp konkrečios kliento vietų.

 The two below fields in combination should be unique customer_id = Column(Integer,ForeignKey('customers.customer_id') location_code = Column(Unicode(10)) 

Taigi, jei turiu du klientus, klientas yra „123“, o klientas - „456“. Abu jie gali turėti vietą, vadinamą „pagrindiniu“, tačiau jie negali turėti dviejų vietų, vadinamų pagrindiniais.

Galiu tai tvarkyti verslo logikoje, bet noriu įsitikinti, kad nėra jokio būdo lengvai pridėti reikalavimą sqlalchemy. Unikalus parametras = „Tikras“ veikia tik tada, kai jis taikomas konkrečiam laukui, ir visa lentelė turės unikalų kodą visoms vietoms.

93
08 апр. Ominus nustatytas balandžio 8 d 2012-04-08 02:55 '12 at 2:55 2012-04-08 02:55
ответ 1 atsakymas

Column dokumentacijos :

unikalus . Kai tiesa, tai reiškia, kad šiame stulpelyje yra unikalus suvaržymas, arba jei indeksas taip pat yra tiesa, rodo, kad indeksas turėtų būti sukurtas su unikalia vėliava. Jei norite nurodyti kelis stulpelius suvaržyme / indekse arba nurodyti aiškų pavadinimą, naudokite „ UniqueConstraint“ arba „ Index“, kad ją aiškiai išreikštumėte.

Kadangi jie nurodo lentelę, o ne į priskirtą klasę, jie yra nurodyti lentelės apibrėžime, arba jei jie naudojami kaip deklaraciniai, kaip __table_args__ :

 # version1: table definition mytable = Table('mytable', meta, # ... Column('customer_id', Integer, ForeignKey('customers.customer_id')), Column('location_code', Unicode(10)), UniqueConstraint('customer_id', 'location_code', name='uix_1') ) # or the index, which will ensure uniqueness as well Index('myindex', mytable.c.customer_id, mytable.c.location_code, unique=True) # version2: declarative class Location(Base): __tablename__ = 'locations' id = Column(Integer, primary_key = True) customer_id = Column(Integer, ForeignKey('customers.customer_id'), nullable=False) location_code = Column(Unicode(10), nullable=False) __table_args__ = (UniqueConstraint('customer_id', 'location_code', name='_customer_location_uc'), ) 
161
08 апр. atsakymas duotas van 08 apr. 2012-04-08 10:26 '12 10:26 AM 2012-04-08 10:26

Kiti klausimai apie arba Užduoti klausimą