Compile this SQL expression. The return value is a :class:`~.Compiled` object. Calling ``str()`` or ``unicode()`` on the returned value will yield a string representation of the result. The :class:`~.Compiled` object also can return a dictionary of bind param
(
self,
bind: Optional[_HasDialect] = None,
dialect: Optional[Dialect] = None,
**kw: Any,
)
| 255 | @util.preload_module("sqlalchemy.engine.default") |
| 256 | @util.preload_module("sqlalchemy.engine.url") |
| 257 | def compile( |
| 258 | self, |
| 259 | bind: Optional[_HasDialect] = None, |
| 260 | dialect: Optional[Dialect] = None, |
| 261 | **kw: Any, |
| 262 | ) -> Compiled: |
| 263 | """Compile this SQL expression. |
| 264 | |
| 265 | The return value is a :class:`~.Compiled` object. |
| 266 | Calling ``str()`` or ``unicode()`` on the returned value will yield a |
| 267 | string representation of the result. The |
| 268 | :class:`~.Compiled` object also can return a |
| 269 | dictionary of bind parameter names and values |
| 270 | using the ``params`` accessor. |
| 271 | |
| 272 | :param bind: An :class:`.Connection` or :class:`.Engine` which |
| 273 | can provide a :class:`.Dialect` in order to generate a |
| 274 | :class:`.Compiled` object. If the ``bind`` and |
| 275 | ``dialect`` parameters are both omitted, a default SQL compiler |
| 276 | is used. |
| 277 | |
| 278 | :param column_keys: Used for INSERT and UPDATE statements, a list of |
| 279 | column names which should be present in the VALUES clause of the |
| 280 | compiled statement. If ``None``, all columns from the target table |
| 281 | object are rendered. |
| 282 | |
| 283 | :param dialect: A :class:`.Dialect` instance which can generate |
| 284 | a :class:`.Compiled` object. This argument takes precedence over |
| 285 | the ``bind`` argument. |
| 286 | |
| 287 | :param compile_kwargs: optional dictionary of additional parameters |
| 288 | that will be passed through to the compiler within all "visit" |
| 289 | methods. This allows any custom flag to be passed through to |
| 290 | a custom compilation construct, for example. It is also used |
| 291 | for the case of passing the ``literal_binds`` flag through:: |
| 292 | |
| 293 | from sqlalchemy.sql import table, column, select |
| 294 | |
| 295 | t = table("t", column("x")) |
| 296 | |
| 297 | s = select(t).where(t.c.x == 5) |
| 298 | |
| 299 | print(s.compile(compile_kwargs={"literal_binds": True})) |
| 300 | |
| 301 | .. seealso:: |
| 302 | |
| 303 | :ref:`faq_sql_expression_string` |
| 304 | |
| 305 | """ |
| 306 | |
| 307 | if dialect is None: |
| 308 | if bind: |
| 309 | dialect = bind.dialect |
| 310 | elif self.stringify_dialect == "default": |
| 311 | dialect = self._default_dialect() |
| 312 | else: |
| 313 | url = util.preloaded.engine_url |
| 314 | dialect = url.URL.create( |
no test coverage detected