1# engine/__init__.py
2# Copyright (C) 2005-2021 the SQLAlchemy authors and contributors
3# <see AUTHORS file>
4#
5# This module is part of SQLAlchemy and is released under
6# the MIT License: http://www.opensource.org/licenses/mit-license.php
7
8"""SQL connections, SQL execution and high-level DB-API interface.
9
10The engine package defines the basic components used to interface
11DB-API modules with higher-level statement construction,
12connection-management, execution and result contexts. The primary
13"entry point" class into this package is the Engine and its public
14constructor ``create_engine()``.
15
16This package includes:
17
18base.py
19 Defines interface classes and some implementation classes which
20 comprise the basic components used to interface between a DB-API,
21 constructed and plain-text statements, connections, transactions,
22 and results.
23
24default.py
25 Contains default implementations of some of the components defined
26 in base.py. All current database dialects use the classes in
27 default.py as base classes for their own database-specific
28 implementations.
29
30strategies.py
31 The mechanics of constructing ``Engine`` objects are represented
32 here. Defines the ``EngineStrategy`` class which represents how
33 to go from arguments specified to the ``create_engine()``
34 function, to a fully constructed ``Engine``, including
35 initialization of connection pooling, dialects, and specific
36 subclasses of ``Engine``.
37
38threadlocal.py
39 The ``TLEngine`` class is defined here, which is a subclass of
40 the generic ``Engine`` and tracks ``Connection`` and
41 ``Transaction`` objects against the identity of the current
42 thread. This allows certain programming patterns based around
43 the concept of a "thread-local connection" to be possible.
44 The ``TLEngine`` is created by using the "threadlocal" engine
45 strategy in conjunction with the ``create_engine()`` function.
46
47url.py
48 Defines the ``URL`` class which represents the individual
49 components of a string URL passed to ``create_engine()``. Also
50 defines a basic module-loading strategy for the dialect specifier
51 within a URL.
52"""
53
54from . import strategies
55from . import util # noqa
56from .base import Connection # noqa
57from .base import Engine # noqa
58from .base import NestedTransaction # noqa
59from .base import RootTransaction # noqa
60from .base import Transaction # noqa
61from .base import TwoPhaseTransaction # noqa
62from .interfaces import Compiled # noqa
63from .interfaces import Connectable # noqa
64from .interfaces import CreateEnginePlugin # noqa
65from .interfaces import Dialect # noqa
66from .interfaces import ExceptionContext # noqa
67from .interfaces import ExecutionContext # noqa
68from .interfaces import TypeCompiler # noqa
69from .result import BaseRowProxy # noqa
70from .result import BufferedColumnResultProxy # noqa
71from .result import BufferedColumnRow # noqa
72from .result import BufferedRowResultProxy # noqa
73from .result import FullyBufferedResultProxy # noqa
74from .result import ResultProxy # noqa
75from .result import RowProxy # noqa
76from .util import connection_memoize # noqa
77from ..sql import ddl # noqa
78
79
80# backwards compat
81
82default_strategy = "plain"
83
84
85def create_engine(*args, **kwargs):
86 """Create a new :class:`_engine.Engine` instance.
87
88 The standard calling form is to send the :ref:`URL <database_urls>` as the
89 first positional argument, usually a string
90 that indicates database dialect and connection arguments::
91
92 engine = create_engine("postgresql://scott:tiger@localhost/test")
93
94 .. note::
95
96 Please review :ref:`database_urls` for general guidelines in composing
97 URL strings. In particular, special characters, such as those often
98 part of passwords, must be URL encoded to be properly parsed.
99
100 Additional keyword arguments may then follow it which
101 establish various options on the resulting :class:`_engine.Engine`
102 and its underlying :class:`.Dialect` and :class:`_pool.Pool`
103 constructs::
104
105 engine = create_engine("mysql://scott:tiger@hostname/dbname",
106 encoding='latin1', echo=True)
107
108 The string form of the URL is
109 ``dialect[+driver]://user:password@host/dbname[?key=value..]``, where
110 ``dialect`` is a database name such as ``mysql``, ``oracle``,
111 ``postgresql``, etc., and ``driver`` the name of a DBAPI, such as
112 ``psycopg2``, ``pyodbc``, ``cx_oracle``, etc. Alternatively,
113 the URL can be an instance of :class:`~sqlalchemy.engine.url.URL`.
114
115 ``**kwargs`` takes a wide variety of options which are routed
116 towards their appropriate components. Arguments may be specific to
117 the :class:`_engine.Engine`, the underlying :class:`.Dialect`,
118 as well as the
119 :class:`_pool.Pool`. Specific dialects also accept keyword arguments that
120 are unique to that dialect. Here, we describe the parameters
121 that are common to most :func:`_sa.create_engine()` usage.
122
123 Once established, the newly resulting :class:`_engine.Engine` will
124 request a connection from the underlying :class:`_pool.Pool` once
125 :meth:`_engine.Engine.connect` is called, or a method which depends on it
126 such as :meth:`_engine.Engine.execute` is invoked. The
127 :class:`_pool.Pool` in turn
128 will establish the first actual DBAPI connection when this request
129 is received. The :func:`_sa.create_engine` call itself does **not**
130 establish any actual DBAPI connections directly.
131
132 .. seealso::
133
134 :doc:`/core/engines`
135
136 :doc:`/dialects/index`
137
138 :ref:`connections_toplevel`
139
140 :param case_sensitive=True: if False, result column names
141 will match in a case-insensitive fashion, that is,
142 ``row['SomeColumn']``.
143
144 :param connect_args: a dictionary of options which will be
145 passed directly to the DBAPI's ``connect()`` method as
146 additional keyword arguments. See the example
147 at :ref:`custom_dbapi_args`.
148
149 :param convert_unicode=False: if set to True, causes
150 all :class:`.String` datatypes to act as though the
151 :paramref:`.String.convert_unicode` flag has been set to ``True``,
152 regardless of a setting of ``False`` on an individual :class:`.String`
153 type. This has the effect of causing all :class:`.String` -based
154 columns to accommodate Python Unicode objects directly as though the
155 datatype were the :class:`.Unicode` type.
156
157 .. deprecated:: 1.3
158
159 The :paramref:`_sa.create_engine.convert_unicode` parameter
160 is deprecated and will be removed in a future release.
161 All modern DBAPIs now support Python Unicode directly and this
162 parameter is unnecessary.
163
164 :param creator: a callable which returns a DBAPI connection.
165 This creation function will be passed to the underlying
166 connection pool and will be used to create all new database
167 connections. Usage of this function causes connection
168 parameters specified in the URL argument to be bypassed.
169
170 This hook is not as flexible as the newer
171 :class:`_events.DialectEvents.do_connect` hook which allows complete
172 control over how a connection is made to the database, given the full
173 set of URL arguments and state beforehand.
174
175 .. seealso::
176
177 :class:`_events.DialectEvents.do_connect` - event hook that allows
178 full control over DBAPI connection mechanics.
179
180 :ref:`custom_dbapi_args`
181
182 :param echo=False: if True, the Engine will log all statements
183 as well as a ``repr()`` of their parameter lists to the default log
184 handler, which defaults to ``sys.stdout`` for output. If set to the
185 string ``"debug"``, result rows will be printed to the standard output
186 as well. The ``echo`` attribute of ``Engine`` can be modified at any
187 time to turn logging on and off; direct control of logging is also
188 available using the standard Python ``logging`` module.
189
190 .. seealso::
191
192 :ref:`dbengine_logging` - further detail on how to configure
193 logging.
194
195
196 :param echo_pool=False: if True, the connection pool will log
197 informational output such as when connections are invalidated
198 as well as when connections are recycled to the default log handler,
199 which defaults to ``sys.stdout`` for output. If set to the string
200 ``"debug"``, the logging will include pool checkouts and checkins.
201 Direct control of logging is also available using the standard Python
202 ``logging`` module.
203
204 .. seealso::
205
206 :ref:`dbengine_logging` - further detail on how to configure
207 logging.
208
209
210 :param empty_in_strategy: The SQL compilation strategy to use when
211 rendering an IN or NOT IN expression for :meth:`.ColumnOperators.in_`
212 where the right-hand side
213 is an empty set. This is a string value that may be one of
214 ``static``, ``dynamic``, or ``dynamic_warn``. The ``static``
215 strategy is the default, and an IN comparison to an empty set
216 will generate a simple false expression "1 != 1". The ``dynamic``
217 strategy behaves like that of SQLAlchemy 1.1 and earlier, emitting
218 a false expression of the form "expr != expr", which has the effect
219 of evaluting to NULL in the case of a null expression.
220 ``dynamic_warn`` is the same as ``dynamic``, however also emits a
221 warning when an empty set is encountered; this because the "dynamic"
222 comparison is typically poorly performing on most databases.
223
224 .. versionadded:: 1.2 Added the ``empty_in_strategy`` setting and
225 additionally defaulted the behavior for empty-set IN comparisons
226 to a static boolean expression.
227
228 :param encoding: Defaults to ``utf-8``. This is the string
229 encoding used by SQLAlchemy for string encode/decode
230 operations which occur within SQLAlchemy, **outside of
231 the DBAPIs own encoding facilities.**
232
233 .. note:: The ``encoding`` parameter deals only with in-Python
234 encoding issues that were prevalent with many DBAPIs under Python
235 2. Under Python 3 it is mostly unused. For DBAPIs that require
236 client encoding configurations, such as those of MySQL and Oracle,
237 please consult specific :ref:`dialect documentation
238 <dialect_toplevel>` for details.
239
240 All modern DBAPIs that work in Python 3 necessarily feature direct
241 support for Python unicode strings. Under Python 2, this was not
242 always the case. For those scenarios where the DBAPI is detected as
243 not supporting a Python ``unicode`` object under Python 2, this
244 encoding is used to determine the source/destination encoding. It is
245 **not used** for those cases where the DBAPI handles unicode directly.
246
247 To properly configure a system to accommodate Python ``unicode``
248 objects, the DBAPI should be configured to handle unicode to the
249 greatest degree as is appropriate - see the notes on unicode pertaining
250 to the specific target database in use at :ref:`dialect_toplevel`.
251
252 Areas where string encoding may need to be accommodated
253 outside of the DBAPI, nearly always under **Python 2 only**,
254 include zero or more of:
255
256 * the values passed to bound parameters, corresponding to
257 the :class:`.Unicode` type or the :class:`.String` type
258 when ``convert_unicode`` is ``True``;
259 * the values returned in result set columns corresponding
260 to the :class:`.Unicode` type or the :class:`.String`
261 type when ``convert_unicode`` is ``True``;
262 * the string SQL statement passed to the DBAPI's
263 ``cursor.execute()`` method;
264 * the string names of the keys in the bound parameter
265 dictionary passed to the DBAPI's ``cursor.execute()``
266 as well as ``cursor.setinputsizes()`` methods;
267 * the string column names retrieved from the DBAPI's
268 ``cursor.description`` attribute.
269
270 When using Python 3, the DBAPI is required to support all of the above
271 values as Python ``unicode`` objects, which in Python 3 are just known
272 as ``str``. In Python 2, the DBAPI does not specify unicode behavior
273 at all, so SQLAlchemy must make decisions for each of the above values
274 on a per-DBAPI basis - implementations are completely inconsistent in
275 their behavior.
276
277 :param execution_options: Dictionary execution options which will
278 be applied to all connections. See
279 :meth:`~sqlalchemy.engine.Connection.execution_options`
280
281 :param hide_parameters: Boolean, when set to True, SQL statement parameters
282 will not be displayed in INFO logging nor will they be formatted into
283 the string representation of :class:`.StatementError` objects.
284
285 .. versionadded:: 1.3.8
286
287 .. seealso::
288
289 :ref:`dbengine_logging` - further detail on how to configure
290 logging.
291
292 :param implicit_returning=True: When ``True``, a RETURNING-
293 compatible construct, if available, will be used to
294 fetch newly generated primary key values when a single row
295 INSERT statement is emitted with no existing returning()
296 clause. This applies to those backends which support RETURNING
297 or a compatible construct, including PostgreSQL, Firebird, Oracle,
298 Microsoft SQL Server. Set this to ``False`` to disable
299 the automatic usage of RETURNING.
300
301 :param isolation_level: this string parameter is interpreted by various
302 dialects in order to affect the transaction isolation level of the
303 database connection. The parameter essentially accepts some subset of
304 these string arguments: ``"SERIALIZABLE"``, ``"REPEATABLE READ"``,
305 ``"READ COMMITTED"``, ``"READ UNCOMMITTED"`` and ``"AUTOCOMMIT"``.
306 Behavior here varies per backend, and
307 individual dialects should be consulted directly.
308
309 Note that the isolation level can also be set on a
310 per-:class:`_engine.Connection` basis as well, using the
311 :paramref:`.Connection.execution_options.isolation_level`
312 feature.
313
314 .. seealso::
315
316 :attr:`_engine.Connection.default_isolation_level`
317 - view default level
318
319 :paramref:`.Connection.execution_options.isolation_level`
320 - set per :class:`_engine.Connection` isolation level
321
322 :ref:`SQLite Transaction Isolation <sqlite_isolation_level>`
323
324 :ref:`PostgreSQL Transaction Isolation <postgresql_isolation_level>`
325
326 :ref:`MySQL Transaction Isolation <mysql_isolation_level>`
327
328 :ref:`session_transaction_isolation` - for the ORM
329
330 :param json_deserializer: for dialects that support the
331 :class:`_types.JSON`
332 datatype, this is a Python callable that will convert a JSON string
333 to a Python object. By default, the Python ``json.loads`` function is
334 used.
335
336 .. versionchanged:: 1.3.7 The SQLite dialect renamed this from
337 ``_json_deserializer``.
338
339 :param json_serializer: for dialects that support the :class:`_types.JSON`
340 datatype, this is a Python callable that will render a given object
341 as JSON. By default, the Python ``json.dumps`` function is used.
342
343 .. versionchanged:: 1.3.7 The SQLite dialect renamed this from
344 ``_json_serializer``.
345
346 :param label_length=None: optional integer value which limits
347 the size of dynamically generated column labels to that many
348 characters. If less than 6, labels are generated as
349 "_(counter)". If ``None``, the value of
350 ``dialect.max_identifier_length``, which may be affected via the
351 :paramref:`_sa.create_engine.max_identifier_length` parameter,
352 is used instead. The value of
353 :paramref:`_sa.create_engine.label_length`
354 may not be larger than that of
355 :paramref:`_sa.create_engine.max_identfier_length`.
356
357 .. seealso::
358
359 :paramref:`_sa.create_engine.max_identifier_length`
360
361 :param listeners: A list of one or more
362 :class:`~sqlalchemy.interfaces.PoolListener` objects which will
363 receive connection pool events.
364
365 :param logging_name: String identifier which will be used within
366 the "name" field of logging records generated within the
367 "sqlalchemy.engine" logger. Defaults to a hexstring of the
368 object's id.
369
370 .. seealso::
371
372 :ref:`dbengine_logging` - further detail on how to configure
373 logging.
374
375
376
377 :param max_identifier_length: integer; override the max_identifier_length
378 determined by the dialect. if ``None`` or zero, has no effect. This
379 is the database's configured maximum number of characters that may be
380 used in a SQL identifier such as a table name, column name, or label
381 name. All dialects determine this value automatically, however in the
382 case of a new database version for which this value has changed but
383 SQLAlchemy's dialect has not been adjusted, the value may be passed
384 here.
385
386 .. versionadded:: 1.3.9
387
388 .. seealso::
389
390 :paramref:`_sa.create_engine.label_length`
391
392 :param max_overflow=10: the number of connections to allow in
393 connection pool "overflow", that is connections that can be
394 opened above and beyond the pool_size setting, which defaults
395 to five. this is only used with :class:`~sqlalchemy.pool.QueuePool`.
396
397 :param module=None: reference to a Python module object (the module
398 itself, not its string name). Specifies an alternate DBAPI module to
399 be used by the engine's dialect. Each sub-dialect references a
400 specific DBAPI which will be imported before first connect. This
401 parameter causes the import to be bypassed, and the given module to
402 be used instead. Can be used for testing of DBAPIs as well as to
403 inject "mock" DBAPI implementations into the :class:`_engine.Engine`.
404
405 :param paramstyle=None: The `paramstyle <http://legacy.python.org/dev/peps/pep-0249/#paramstyle>`_
406 to use when rendering bound parameters. This style defaults to the
407 one recommended by the DBAPI itself, which is retrieved from the
408 ``.paramstyle`` attribute of the DBAPI. However, most DBAPIs accept
409 more than one paramstyle, and in particular it may be desirable
410 to change a "named" paramstyle into a "positional" one, or vice versa.
411 When this attribute is passed, it should be one of the values
412 ``"qmark"``, ``"numeric"``, ``"named"``, ``"format"`` or
413 ``"pyformat"``, and should correspond to a parameter style known
414 to be supported by the DBAPI in use.
415
416 :param pool=None: an already-constructed instance of
417 :class:`~sqlalchemy.pool.Pool`, such as a
418 :class:`~sqlalchemy.pool.QueuePool` instance. If non-None, this
419 pool will be used directly as the underlying connection pool
420 for the engine, bypassing whatever connection parameters are
421 present in the URL argument. For information on constructing
422 connection pools manually, see :ref:`pooling_toplevel`.
423
424 :param poolclass=None: a :class:`~sqlalchemy.pool.Pool`
425 subclass, which will be used to create a connection pool
426 instance using the connection parameters given in the URL. Note
427 this differs from ``pool`` in that you don't actually
428 instantiate the pool in this case, you just indicate what type
429 of pool to be used.
430
431 :param pool_logging_name: String identifier which will be used within
432 the "name" field of logging records generated within the
433 "sqlalchemy.pool" logger. Defaults to a hexstring of the object's
434 id.
435
436
437 .. seealso::
438
439 :ref:`dbengine_logging` - further detail on how to configure
440 logging.
441
442
443 :param pool_pre_ping: boolean, if True will enable the connection pool
444 "pre-ping" feature that tests connections for liveness upon
445 each checkout.
446
447 .. versionadded:: 1.2
448
449 .. seealso::
450
451 :ref:`pool_disconnects_pessimistic`
452
453 :param pool_size=5: the number of connections to keep open
454 inside the connection pool. This used with
455 :class:`~sqlalchemy.pool.QueuePool` as
456 well as :class:`~sqlalchemy.pool.SingletonThreadPool`. With
457 :class:`~sqlalchemy.pool.QueuePool`, a ``pool_size`` setting
458 of 0 indicates no limit; to disable pooling, set ``poolclass`` to
459 :class:`~sqlalchemy.pool.NullPool` instead.
460
461 :param pool_recycle=-1: this setting causes the pool to recycle
462 connections after the given number of seconds has passed. It
463 defaults to -1, or no timeout. For example, setting to 3600
464 means connections will be recycled after one hour. Note that
465 MySQL in particular will disconnect automatically if no
466 activity is detected on a connection for eight hours (although
467 this is configurable with the MySQLDB connection itself and the
468 server configuration as well).
469
470 .. seealso::
471
472 :ref:`pool_setting_recycle`
473
474 :param pool_reset_on_return='rollback': set the
475 :paramref:`_pool.Pool.reset_on_return` parameter of the underlying
476 :class:`_pool.Pool` object, which can be set to the values
477 ``"rollback"``, ``"commit"``, or ``None``.
478
479 .. seealso::
480
481 :paramref:`_pool.Pool.reset_on_return`
482
483 :param pool_timeout=30: number of seconds to wait before giving
484 up on getting a connection from the pool. This is only used
485 with :class:`~sqlalchemy.pool.QueuePool`.
486
487 :param pool_use_lifo=False: use LIFO (last-in-first-out) when retrieving
488 connections from :class:`.QueuePool` instead of FIFO
489 (first-in-first-out). Using LIFO, a server-side timeout scheme can
490 reduce the number of connections used during non- peak periods of
491 use. When planning for server-side timeouts, ensure that a recycle or
492 pre-ping strategy is in use to gracefully handle stale connections.
493
494 .. versionadded:: 1.3
495
496 .. seealso::
497
498 :ref:`pool_use_lifo`
499
500 :ref:`pool_disconnects`
501
502 :param plugins: string list of plugin names to load. See
503 :class:`.CreateEnginePlugin` for background.
504
505 .. versionadded:: 1.2.3
506
507 :param strategy='plain': selects alternate engine implementations.
508 Currently available are:
509
510 * the ``threadlocal`` strategy, which is described in
511 :ref:`threadlocal_strategy`;
512 * the ``mock`` strategy, which dispatches all statement
513 execution to a function passed as the argument ``executor``.
514 See `example in the FAQ
515 <http://docs.sqlalchemy.org/en/latest/faq/metadata_schema.html#how-can-i-get-the-create-table-drop-table-output-as-a-string>`_.
516
517 :param executor=None: a function taking arguments
518 ``(sql, *multiparams, **params)``, to which the ``mock`` strategy will
519 dispatch all statement execution. Used only by ``strategy='mock'``.
520
521 """ # noqa
522
523 strategy = kwargs.pop("strategy", default_strategy)
524 strategy = strategies.strategies[strategy]
525 return strategy.create(*args, **kwargs)
526
527
528def engine_from_config(configuration, prefix="sqlalchemy.", **kwargs):
529 """Create a new Engine instance using a configuration dictionary.
530
531 The dictionary is typically produced from a config file.
532
533 The keys of interest to ``engine_from_config()`` should be prefixed, e.g.
534 ``sqlalchemy.url``, ``sqlalchemy.echo``, etc. The 'prefix' argument
535 indicates the prefix to be searched for. Each matching key (after the
536 prefix is stripped) is treated as though it were the corresponding keyword
537 argument to a :func:`_sa.create_engine` call.
538
539 The only required key is (assuming the default prefix) ``sqlalchemy.url``,
540 which provides the :ref:`database URL <database_urls>`.
541
542 A select set of keyword arguments will be "coerced" to their
543 expected type based on string values. The set of arguments
544 is extensible per-dialect using the ``engine_config_types`` accessor.
545
546 :param configuration: A dictionary (typically produced from a config file,
547 but this is not a requirement). Items whose keys start with the value
548 of 'prefix' will have that prefix stripped, and will then be passed to
549 :ref:`create_engine`.
550
551 :param prefix: Prefix to match and then strip from keys
552 in 'configuration'.
553
554 :param kwargs: Each keyword argument to ``engine_from_config()`` itself
555 overrides the corresponding item taken from the 'configuration'
556 dictionary. Keyword arguments should *not* be prefixed.
557
558 """
559
560 options = dict(
561 (key[len(prefix) :], configuration[key])
562 for key in configuration
563 if key.startswith(prefix)
564 )
565 options["_coerce_config"] = True
566 options.update(kwargs)
567 url = options.pop("url")
568 return create_engine(url, **options)
569
570
571__all__ = ("create_engine", "engine_from_config")