From e0b6b7639d6dfb053495b2adec8b44c89c2d611e Mon Sep 17 00:00:00 2001 From: Damien Garaud Date: Wed, 23 Jan 2019 11:13:37 -0500 Subject: [PATCH] Fix single quote escaping for the SQL comments Fixed issue in new comment support where autogenerated Python code for comments wasn't using ``repr()`` thus causing issues with quoting. Pull request courtesy Damien Garaud. Fixes: #529 Closes: #530 Pull-request: https://github.com/sqlalchemy/alembic/pull/530 Pull-request-sha: c85f2de986da6c1231a18732b097ff890e67977e Change-Id: I7e55cc1968ba83765386c66bd1f1e69a593f133a --- alembic/autogenerate/render.py | 2 +- docs/build/unreleased/529.rst | 7 +++++++ tests/test_autogen_render.py | 13 +++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 docs/build/unreleased/529.rst diff --git a/alembic/autogenerate/render.py b/alembic/autogenerate/render.py index 64dbaebf..3fb0a422 100644 --- a/alembic/autogenerate/render.py +++ b/alembic/autogenerate/render.py @@ -614,7 +614,7 @@ def _render_column(column, autogen_context): comment = sqla_compat._comment_attribute(column) if comment: - opts.append(("comment", "'%s'" % comment)) + opts.append(("comment", '%r' % comment)) # TODO: for non-ascii colname, assign a "key" return "%(prefix)sColumn(%(name)r, %(type)s, %(kw)s)" % { diff --git a/docs/build/unreleased/529.rst b/docs/build/unreleased/529.rst new file mode 100644 index 00000000..764e42df --- /dev/null +++ b/docs/build/unreleased/529.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, autogenerate + :tickets: 529 + + Fixed issue in new comment support where autogenerated Python code + for comments wasn't using ``repr()`` thus causing issues with + quoting. Pull request courtesy Damien Garaud. diff --git a/tests/test_autogen_render.py b/tests/test_autogen_render.py index 7673a493..4d010a41 100644 --- a/tests/test_autogen_render.py +++ b/tests/test_autogen_render.py @@ -1155,6 +1155,19 @@ class AutogenRenderTest(TestBase): "comment='This is a comment')", ) + @config.requirements.comments_api + def test_render_col_comment_with_quote(self): + c = Column("some_key", Integer, comment="This is a john's comment") + Table("some_table", MetaData(), c) + result = autogenerate.render._render_column(c, self.autogen_context) + print(result) + eq_ignore_whitespace( + result, + "sa.Column('some_key', sa.Integer(), " + "nullable=True, " + "comment=\"This is a john's comment\")", + ) + def test_render_col_autoinc_false_mysql(self): c = Column("some_key", Integer, primary_key=True, autoincrement=False) Table("some_table", MetaData(), c) -- 2.47.2