were tutorial tables quick query one multiple guide found for español create python sqlalchemy

python - tutorial - sqlalchemy único en múltiples columnas



sqlalchemy select (1)

Digamos que tengo una clase que representa ubicaciones. Las ubicaciones "pertenecen" a los clientes. Las ubicaciones se identifican mediante un código de 10 caracteres Unicode. El "código de ubicación" debe ser único entre las ubicaciones para un cliente específico.

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

Entonces, si tengo dos clientes, el cliente "123" y el cliente "456". Ambos pueden tener una ubicación llamada "principal", pero ninguno podría tener dos ubicaciones llamadas main.

Puedo manejar esto en la lógica comercial, pero quiero asegurarme de que no haya forma de agregar fácilmente el requisito en sqlalchemy. La opción unique = True parece funcionar solo cuando se aplica a un campo específico y causaría que toda la tabla solo tenga un código único para todas las ubicaciones.


Extracto de la documentation de la Column :

unique : cuando True, indica que esta columna contiene una restricción única, o si el índice también es True, indica que el índice debe crearse con el distintivo único. Para especificar varias columnas en la restricción / índice o para especificar un nombre explícito, utilice las construcciones UniqueConstraint o Index explícitamente.

Como estos pertenecen a una tabla y no a una clase asignada, uno los declara en la definición de tabla, o si usa declarativo como en __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''), )