From 6633fcce8a4a1ec8360a17a94aee6a1f3e31ad10 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 21 Apr 2012 10:26:53 -0400 Subject: [PATCH] - [feature] Added support for UniqueConstraint in autogenerate, courtesy Atsushi Odagiri --- CHANGES | 5 +++++ alembic/autogenerate.py | 7 +++++-- tests/test_autogenerate.py | 10 +++++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 1e3843a9..23523a03 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,8 @@ +0.3.2 +===== +- [feature] Added support for UniqueConstraint + in autogenerate, courtesy Atsushi Odagiri + 0.3.1 ===== - [bug] bulk_insert() fixes: diff --git a/alembic/autogenerate.py b/alembic/autogenerate.py index e12e9e6d..1b036043 100644 --- a/alembic/autogenerate.py +++ b/alembic/autogenerate.py @@ -554,8 +554,11 @@ def _render_check_constraint(constraint, autogen_context): } def _render_unique_constraint(constraint, autogen_context): - - return "%(prefix)sUniqueConstraint(%(cols)s)" % { + opts = [] + if constraint.name: + opts.append(("name", "'%s'" % constraint.name)) + return "%(prefix)sUniqueConstraint(%(cols)s%(opts)s)" % { + 'opts':", " + (", ".join("%s=%s" % (k, v) for k, v in opts)) if opts else "", 'cols': ",".join(["'%s'" % c.name for c in constraint.columns]), "prefix":_sqlalchemy_autogenerate_prefix(autogen_context) } diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py index 0e97fdf8..5d4a06f0 100644 --- a/tests/test_autogenerate.py +++ b/tests/test_autogenerate.py @@ -1,5 +1,6 @@ from sqlalchemy import MetaData, Column, Table, Integer, String, Text, \ - Numeric, CHAR, ForeignKey, DATETIME, TypeDecorator, CheckConstraint, Unicode + Numeric, CHAR, ForeignKey, DATETIME, TypeDecorator, CheckConstraint, Unicode,\ + UniqueConstraint from sqlalchemy.types import NULLTYPE from sqlalchemy.engine.reflection import Inspector from alembic import autogenerate @@ -368,10 +369,12 @@ class AutogenRenderTest(TestCase): m = MetaData() t = Table('test', m, Column('id', Integer, primary_key=True), - Column('name', Unicode(255), unique=True), + Column('name', Unicode(255)), Column("address_id", Integer, ForeignKey("address.id")), Column("timestamp", DATETIME, server_default="NOW()"), Column("amount", Numeric(5, 2)), + UniqueConstraint("name", name="uq_name"), + UniqueConstraint("timestamp"), ) eq_ignore_whitespace( autogenerate._add_table(t, self.autogen_context), @@ -385,7 +388,8 @@ class AutogenRenderTest(TestCase): "sa.Column('amount', sa.Numeric(precision=5, scale=2), nullable=True)," "sa.ForeignKeyConstraint(['address_id'], ['address.id'], )," "sa.PrimaryKeyConstraint('id')," - "sa.UniqueConstraint('name')" + "sa.UniqueConstraint('name', name='uq_name')," + "sa.UniqueConstraint('timestamp')" ")" ) -- 2.47.2