summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/dialects/sqlite/base.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py
index b50170759..312188f96 100644
--- a/lib/sqlalchemy/dialects/sqlite/base.py
+++ b/lib/sqlalchemy/dialects/sqlite/base.py
@@ -1366,14 +1366,19 @@ class SQLiteDialect(default.DefaultDialect):
FK_PATTERN = (
'(?:CONSTRAINT (\w+) +)?'
'FOREIGN KEY *\( *(.+?) *\) +'
- 'REFERENCES +(?:(?:"(.+?)")|([a-z0-9_]+)) *\((.+?)\)'
+ 'REFERENCES +(?:(?:"(.+?)")|([a-z0-9_]+)) *\((.+?)\) *'
+ '(?:ON DELETE '
+ '(SET NULL|SET DEFAULT|CASCADE|RESTRICT|NO ACTION) *)?'
+ '(?:ON UPDATE '
+ '(SET NULL|SET DEFAULT|CASCADE|RESTRICT|NO ACTION))?'
)
for match in re.finditer(FK_PATTERN, table_data, re.I):
(
constraint_name, constrained_columns,
referred_quoted_name, referred_name,
- referred_columns) = match.group(1, 2, 3, 4, 5)
+ referred_columns, ondelete,
+ onupdate) = match.group(1, 2, 3, 4, 5, 6, 7)
constrained_columns = list(
self._find_cols_in_sig(constrained_columns))
if not referred_columns:
@@ -1382,14 +1387,19 @@ class SQLiteDialect(default.DefaultDialect):
referred_columns = list(
self._find_cols_in_sig(referred_columns))
referred_name = referred_quoted_name or referred_name
+ options = {}
+ if ondelete:
+ options['ondelete'] = ondelete
+ if onupdate:
+ options['onupdate'] = onupdate
yield (
constraint_name, constrained_columns,
- referred_name, referred_columns)
+ referred_name, referred_columns, options)
fkeys = []
for (
constraint_name, constrained_columns,
- referred_name, referred_columns) in parse_fks():
+ referred_name, referred_columns, options) in parse_fks():
sig = fk_sig(
constrained_columns, referred_name, referred_columns)
if sig not in keys_by_signature:
@@ -1403,6 +1413,8 @@ class SQLiteDialect(default.DefaultDialect):
continue
key = keys_by_signature.pop(sig)
key['name'] = constraint_name
+ if options:
+ key['options'] = options
fkeys.append(key)
# assume the remainders are the unnamed, inline constraints, just
# use them as is as it's extremely difficult to parse inline