--- /dev/null
+.. change::
+ :tags: bug, typing
+ :tickets: 9170
+
+ Fixed typing issue where :func:`_orm.mapped_column` objects typed as
+ :class:`_orm.Mapped` wouldn't be accepted in schema constraints such as
+ :class:`_schema.ForeignKey`, :class:`_schema.UniqueConstraint` or
+ :class:`_schema.Index`.
interfaces.PropComparator[_T],
roles.JoinTargetRole,
roles.OnClauseRole,
- roles.DDLConstraintColumnRole,
sql_base.Immutable,
cache_key.SlotsMemoizedHasCacheKey,
util.MemoizedSlots,
from .. import exc as sa_exc
from .. import inspection
from .. import util
+from ..sql import roles
from ..sql.elements import SQLColumnExpression
from ..sql.elements import SQLCoreOperations
from ..util import FastIntFlag
SQLORMExpression[_T],
ORMDescriptor[_T],
_MappedAnnotationBase[_T],
+ roles.DDLConstraintColumnRole,
):
"""Represent an ORM mapped attribute on a mapped class.
from ..sql import coercions
from ..sql import roles
from ..sql.base import _NoArg
-from ..sql.roles import DDLConstraintColumnRole
from ..sql.schema import Column
from ..sql.schema import SchemaConst
from ..sql.type_api import TypeEngine
class MappedColumn(
- DDLConstraintColumnRole,
_IntrospectsAnnotations,
_MapsColumns[_T],
_DeclarativeMapped[_T],
from typing import Optional
+from sqlalchemy import ForeignKey
+from sqlalchemy import Index
from sqlalchemy import Integer
from sqlalchemy import String
+from sqlalchemy import UniqueConstraint
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
c: Mapped[str] = mapped_column(nullable=True)
d: Mapped[str] = mapped_column(nullable=False)
- e: Mapped[Optional[str]] = mapped_column(nullable=True)
+ e: Mapped[Optional[str]] = mapped_column(ForeignKey(c), nullable=True)
- f: Mapped[Optional[str]] = mapped_column(nullable=False)
+ f1 = mapped_column(Integer)
+ f: Mapped[Optional[str]] = mapped_column(ForeignKey(f1), nullable=False)
g: Mapped[str] = mapped_column(String)
h: Mapped[Optional[str]] = mapped_column(String)
String,
nullable=False,
)
+
+ __table_args__ = (UniqueConstraint(a, b, name="uq1"), Index("ix1", c, d))