1111from sphinx .util .docutils import SphinxDirective
1212from sqlalchemy import Column , Constraint , inspect
1313from sqlalchemy .orm .mapper import Mapper
14+ from sqlalchemy .sql .elements import ClauseElement
1415from sqlalchemy .sql .schema import (
1516 CheckConstraint ,
1617 ForeignKeyConstraint ,
@@ -169,6 +170,14 @@ def add_content(self, mapper: Mapper, definition: nodes.definition) -> None:
169170 definition [- 1 ] += nodes .list_item ("" , nodes .paragraph (text = text ))
170171
171172
173+ def check_constraint_to_str (constraint : CheckConstraint ) -> str :
174+ if isinstance (constraint .sqltext , ClauseElement ):
175+ text = constraint .sqltext .compile (compile_kwargs = {"literal_binds" : True })
176+ else :
177+ text = getattr (constraint .sqltext , "text" , "" )
178+ return f"CHECK ({ text } )"
179+
180+
172181def contraint_to_str (constraint : Constraint ) -> str :
173182 """Convert a constraint to a string."""
174183 if isinstance (constraint , PrimaryKeyConstraint ):
@@ -182,7 +191,7 @@ def contraint_to_str(constraint: Constraint) -> str:
182191 if isinstance (constraint , UniqueConstraint ):
183192 return f"UNIQUE ({ ', ' .join (c .name for c in constraint .columns )} )"
184193 if isinstance (constraint , CheckConstraint ):
185- return f"CHECK ( { constraint . sqltext . text } )" # type: ignore
194+ return check_constraint_to_str ( constraint )
186195 return "UNKNOWN"
187196
188197
0 commit comments