SORU
7 NİSAN 2012, CUMARTESİ


sqlalchemy birden çok sütun benzersiz

Hadi konumları temsil eden bir sınıf var ki. Yerleri "ait" için müşteriler. Yerleri 10 karakter bir unicode kod ile tanımlanır. "Kod konumu" belirli bir müşteri için yerler arasında benzersiz olmalıdır.

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

Eğer öyleyse iki müşteri var, "" müşteri "456". 123 müşteri İkisi de konum olarak adlandırılır "ana" ama ne iki yerde olabilir denilen ana.

İş mantığı bunu halledebilirim ama kolayca sqlalchemy şartı eklemek için bir yolu var mı emin olmak istiyorum. Benzersiz=Doğru seçenek yalnızca belirli bir alana uygulandığında iş gibi görünüyor ve tüm tabloyu sadece tüm mekanlar için benzersiz bir kod neden olur.

CEVAP
8 NİSAN 2012, Pazar


Column: documentation özü

benzersizDoğru zaman, bu sütunda gösterir benzersiz içerir veya kısıtlamadiziniçin de geçerlidir, belirten Endeksi benzersiz bayrağı ile oluşturulmalıdır. Birden çok sütun belirtmek için kısıtlama veya açık adını belirtmek için/dizin kullanımı UniqueConstraint Index açıkça oluşturur.

Bu eşleşen bir Sınıf bir Tablo için değil, ait olarak, tabloda bu tanım, veya __table_args__ gibi bildirimsel kullanarak bir beyan:

# 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'),
                     )

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • Metheud

    Metheud

    9 EYLÜL 2006
  • TeachMeComputer

    TeachMeCompu

    31 EKİM 2009