CREATE TABLE fails on MySQL on trunk (6512)

Issue #1623 resolved
Former user created an issue

(original reporter: ged) Attached test case fails with this traceback:

Traceback (most recent call last):
  File "test_mysql.py", line 9, in <module>
    metadata.create_all()
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/schema.py", line 1868, in create_all
    bind.create(self, checkfirst=checkfirst, tables=tables)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/base.py", line 1329, in create
    self._run_visitor(ddl.SchemaGenerator, entity, connection=connection, **kwargs)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/base.py", line 1360, in _run_visitor
    visitorcallable(self.dialect, conn, **kwargs).traverse(element)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/sql/visitors.py", line 86, in traverse
    return traverse(obj, self.__traverse_options__, self._visitor_dict)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/sql/visitors.py", line 197, in traverse
    return traverse_using(iterate(obj, opts), obj, visitors)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/sql/visitors.py", line 191, in traverse_using
    meth(target)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/ddl.py", line 42, in visit_metadata
    self.traverse_single(table)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/sql/visitors.py", line 76, in traverse_single
    return meth(obj)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/ddl.py", line 55, in visit_table
    self.connection.execute(schema.CreateTable(table))
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/base.py", line 991, in execute
    return Connection.executors[c](c)(self, object, multiparams, params)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/base.py", line 1040, in _execute_ddl
    return self.__execute_context(context)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/base.py", line 1076, in __execute_context
    self._cursor_execute(context.cursor, context.statement, context.parameters[0](0), context=context)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/base.py", line 1138, in _cursor_execute
    self._handle_dbapi_exception(e, statement, parameters, cursor, context)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/base.py", line 1136, in _cursor_execute
    self.dialect.do_execute(cursor, statement, parameters, context=context)
  File "/home/ged/devel/sqlalchemy/trunk/lib/sqlalchemy/engine/default.py", line 207, in do_execute
    cursor.execute(statement, parameters)
  File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 166, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaulterrorhandler
    raise errorclass, errorvalue
sqlalchemy.exc.ProgrammingError: (ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' \n\tPRIMARY KEY (id)\n)' at line 3") '\nCREATE TABLE test (\n\tid INTEGER NOT NULL AUTO_INCREMENT, \n\tfield0 VARCHAR, \n\tPRIMARY KEY (id)\n)\n\n' ()

Note the extra comma.

Comments (2)

  1. Mike Bayer repo owner

    there's no extra comma. VARCHAR requires a length on MySQL. Since VARCHAR is invalid to be rendered with no length in any situation and is not legal anway within a CAST on MySQL, I'll make VARCHAR raise when rendered with no length - reopens #1252.

  2. Log in to comment