"%s=%r" % ('referent_schema', target_schema)
)
- if constraint.deferrable:
- args.append("%s=%r" % ("deferrable", str(constraint.deferrable)))
- if constraint.initially:
- args.append("%s=%r" % ("initially", str(constraint.initially)))
+ opts = []
+ _populate_render_fk_opts(constraint, opts)
+ args.extend(("%s=%s" % (k, v) for (k, v) in opts))
+
return "%(prefix)screate_foreign_key(%(args)s)" % {
'prefix': _alembic_autogenerate_prefix(autogen_context),
'args': ", ".join(args)
return colspec
-def _render_foreign_key(constraint, autogen_context):
- rendered = _user_defined_render("foreign_key", constraint, autogen_context)
- if rendered is not False:
- return rendered
+def _populate_render_fk_opts(constraint, opts):
- opts = []
- if constraint.name:
- opts.append(("name", repr(
- _render_gen_name(autogen_context, constraint.name))))
if constraint.onupdate:
opts.append(("onupdate", repr(constraint.onupdate)))
if constraint.ondelete:
if constraint.use_alter:
opts.append(("use_alter", repr(constraint.use_alter)))
+
+def _render_foreign_key(constraint, autogen_context):
+ rendered = _user_defined_render("foreign_key", constraint, autogen_context)
+ if rendered is not False:
+ return rendered
+
+ opts = []
+ if constraint.name:
+ opts.append(("name", repr(
+ _render_gen_name(autogen_context, constraint.name))))
+
+ _populate_render_fk_opts(constraint, opts)
+
apply_metadata_schema = constraint.parent.metadata.schema
return "%(prefix)sForeignKeyConstraint([%(cols)s], "\
"[%(refcols)s], %(args)s)" % {
"op.create_foreign_key('fk_a_id', 'b', 'a', ['a_id'], ['id'])"
)
+ def test_add_fk_constraint_kwarg(self):
+ m = MetaData()
+ t1 = Table('t', m, Column('c', Integer))
+ t2 = Table('t2', m, Column('c_rem', Integer))
+
+ fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], onupdate="CASCADE")
+ if not util.sqla_08:
+ t1.append_constraint(fk)
+
+ # SQLA 0.9 generates a u'' here for remote cols while 0.8 does not,
+ # so just whack out "'u" here from the generated
+
+ eq_ignore_whitespace(
+ re.sub(
+ r"u'", "'",
+ autogenerate.render._add_fk_constraint(
+ fk, self.autogen_context)),
+ "op.create_foreign_key(None, 't', 't2', ['c'], ['c_rem'], "
+ "onupdate='CASCADE')"
+ )
+
+ fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], ondelete="CASCADE")
+ if not util.sqla_08:
+ t1.append_constraint(fk)
+
+ eq_ignore_whitespace(
+ re.sub(
+ r"u'", "'",
+ autogenerate.render._add_fk_constraint(
+ fk, self.autogen_context)),
+ "op.create_foreign_key(None, 't', 't2', ['c'], ['c_rem'], "
+ "ondelete='CASCADE')"
+ )
+
+ fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], deferrable=True)
+ if not util.sqla_08:
+ t1.append_constraint(fk)
+ eq_ignore_whitespace(
+ re.sub(
+ r"u'", "'",
+ autogenerate.render._add_fk_constraint(
+ fk, self.autogen_context),
+ ),
+ "op.create_foreign_key(None, 't', 't2', ['c'], ['c_rem'], "
+ "deferrable=True)"
+ )
+
+ fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], initially="XYZ")
+ if not util.sqla_08:
+ t1.append_constraint(fk)
+ eq_ignore_whitespace(
+ re.sub(
+ r"u'", "'",
+ autogenerate.render._add_fk_constraint(
+ fk, self.autogen_context)
+ ),
+ "op.create_foreign_key(None, 't', 't2', ['c'], ['c_rem'], "
+ "initially='XYZ')"
+ )
+
+ fk = ForeignKeyConstraint(
+ [t1.c.c], [t2.c.c_rem],
+ initially="XYZ", ondelete="CASCADE", deferrable=True)
+ if not util.sqla_08:
+ t1.append_constraint(fk)
+ eq_ignore_whitespace(
+ re.sub(
+ r"u'", "'",
+ autogenerate.render._add_fk_constraint(
+ fk, self.autogen_context)
+ ),
+ "op.create_foreign_key(None, 't', 't2', ['c'], ['c_rem'], "
+ "ondelete='CASCADE', initially='XYZ', deferrable=True)"
+ )
+
def test_add_fk_constraint_inline_colkeys(self):
m = MetaData()
Table('a', m, Column('id', Integer, key='aid', primary_key=True))