diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-09-23 12:24:24 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-09-23 12:24:24 -0400 |
| commit | b7554b0e2d1536c17f060b421a35c677f88fdb1f (patch) | |
| tree | 71314f4a62b921d9df828d051c1db09e8e54639c /lib | |
| parent | c7ab095fdbb13d045376df3f997a30058d7c82dd (diff) | |
| download | sqlalchemy-b7554b0e2d1536c17f060b421a35c677f88fdb1f.tar.gz | |
- improve docs for MySQL/SQLite foreign key/ON UPDATE|DELETE instructions,
[ticket:2514]
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/sqlite/base.py | 36 |
2 files changed, 44 insertions, 1 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index fba920533..4c983ad30 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -49,13 +49,16 @@ been idle for eight hours or more. To circumvent having this issue, use the engine = create_engine('mysql+mysqldb://...', pool_recycle=3600) +.. _mysql_storage_engines: + Storage Engines --------------- Most MySQL server installations have a default table type of ``MyISAM``, a non-transactional table type. During a transaction, non-transactional storage engines do not participate and continue to store table changes in autocommit -mode. For fully atomic transactions, all participating tables must use a +mode. For fully atomic transactions as well as support for foreign key +constraints, all participating tables must use a transactional engine such as ``InnoDB``, ``Falcon``, ``SolidDB``, `PBXT`, etc. Storage engines can be elected when creating tables in SQLAlchemy by supplying @@ -68,6 +71,10 @@ creation option can be specified in this syntax:: mysql_charset='utf8' ) +.. seealso:: + + `The InnoDB Storage Engine <http://dev.mysql.com/doc/refman/5.0/en/innodb-storage-engine.html>`_ - on the MySQL website. + Case Sensitivity and Table Reflection ------------------------------------- diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index 837f1adcd..75c2924a3 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -85,6 +85,42 @@ For more information on SQLite's lack of concurrency by design, please see `Situations Where Another RDBMS May Work Better - High Concurrency <http://www.sqlite.org/whentouse.html>`_ near the bottom of the page. +.. _sqlite_foreign_keys: + +Foreign Key Support +------------------- + +SQLite supports FOREIGN KEY syntax when emitting CREATE statements for tables, +however by default these constraints have no effect on the operation +of the table. + +Constraint checking on SQLite has three prerequisites: + +* At least version 3.6.19 of SQLite must be in use +* The SQLite libary must be compiled *without* the SQLITE_OMIT_FOREIGN_KEY + or SQLITE_OMIT_TRIGGER symbols enabled. +* The ``PRAGMA foreign_keys = ON`` statement must be emitted on all connections + before use. + +SQLAlchemy allows for the ``PRAGMA`` statement to be emitted automatically +for new connections through the usage of events:: + + from sqlalchemy.engine import Engine + from sqlalchemy import event + + @event.listens_for(Engine, "connect") + def set_sqlite_pragma(dbapi_connection, connection_record): + cursor = dbapi_connection.cursor() + cursor.execute("PRAGMA foreign_keys=ON") + cursor.close() + +.. seealso:: + + `SQLite Foreign Key Support <http://www.sqlite.org/foreignkeys.html>`_ - + on the SQLite web site. + + :ref:`event_toplevel` - SQLAlchemy event API. + """ import datetime, re |
