from sqlalchemy import schema as sa_schema, types as sqltypes, sql
from ..operations import ops
from ..util import compat
+from ..util import sqla_compat
import re
from ..util.compat import string_types
from .. import util
if rendered:
opts.append(("server_default", rendered))
- if not column.autoincrement:
+ if column.autoincrement is not None and \
+ column.autoincrement != sqla_compat.AUTOINCREMENT_DEFAULT:
opts.append(("autoincrement", column.autoincrement))
if column.nullable is not None:
else:
from sqlalchemy.sql.expression import _TextClause as TextClause
+if sqla_110:
+ AUTOINCREMENT_DEFAULT = 'auto'
+else:
+ AUTOINCREMENT_DEFAULT = True
def _table_for_constraint(constraint):
if isinstance(constraint, ForeignKeyConstraint):
--- /dev/null
+.. change::
+ :tags: bug, autogenerate
+
+ Fixed issue where "autoincrement=True" would not render for a column that
+ specified it, since as of SQLAlchemy 1.1 this is no longer the default
+ value for "autoincrement". Note the behavior only takes effect against the
+ SQLAlchemy 1.1.0 and higher; for pre-1.1 SQLAlchemy, "autoincrement=True"
+ does not render as was the case before. Pull request courtesy Elad Almos.
"sa.PrimaryKeyConstraint('x'))"
)
+ @config.requirements.fail_before_sqla_110
+ def test_render_table_w_autoincrement(self):
+ m = MetaData()
+ t = Table(
+ 'test', m,
+ Column('id1', Integer, primary_key=True),
+ Column('id2', Integer, primary_key=True, autoincrement=True))
+ op_obj = ops.CreateTableOp.from_table(t)
+ eq_ignore_whitespace(
+ autogenerate.render_op_text(self.autogen_context, op_obj),
+ "op.create_table('test',"
+ "sa.Column('id1', sa.Integer(), nullable=False),"
+ "sa.Column('id2', sa.Integer(), autoincrement=True, "
+ "nullable=False),"
+ "sa.PrimaryKeyConstraint('id1', 'id2')"
+ ")"
+ )
+
def test_render_add_column(self):
op_obj = ops.AddColumnOp(
"foo", Column("x", Integer, server_default="5"))