--- /dev/null
+.. change::
+ :tags: usecase, sql
+ :tickets: 4933
+
+ The :func:`.text` construct now supports "unique" bound parameters, which
+ will dynamically uniquify themselves on compilation thus allowing multiple
+ :func:`.text` constructs with the same bound parameter names to be combined
+ together.
+
timestamp=datetime.datetime(2012, 10, 8, 15, 12, 5)
)
+ The :meth:`.TextClause.bindparams` method also supports the concept of
+ **unique** bound parameters. These are parameters that are
+ "uniquified" on name at statement compilation time, so that multiple
+ :func:`.text` constructs may be combined together without the names
+ conflicting. To use this feature, specify the
+ :paramref:`.BindParameter.unique` flag on each :func:`.bindparam`
+ object::
+
+ stmt1 = text("select id from table where name=:name").bindparams(
+ bindparam("name", value='name1', unique=True)
+ )
+ stmt2 = text("select id from table where name=:name").bindparams(
+ bindparam("name", value='name2', unique=True)
+ )
+
+ union = union_all(
+ stmt1.columns(column("id")),
+ stmt2.columns(column("id"))
+ )
+
+ The above statement will render as::
+
+ select id from table where name=:name_1
+ UNION ALL select id from table where name=:name_2
+
+ .. versionadded:: 1.3.11 Added support for the
+ :paramref:`.BindParameter.unique` flag to work with :func:`.text`
+ constructs.
+
"""
self._bindparams = new_params = self._bindparams.copy()