CREATE TABLE fails on MySQL on trunk (6512)
Issue #1623
resolved
(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)
-
repo owner -
Account Deleted (original author: ged) Oops, sorry.
- Log in to comment
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.