mutation of Table objects in-place is not something SQLAlchemy supports. I would advise using an extension method to TypeEngine called with_variant() (search the docs for it, cut and paste is not working on this terminal ) which allows a single type object, like a String(), to produce multiple variants per backend, such as mysql.VARCHAR() only on the mysql backend, plain String/VARCHAR on others.
gostones wrote: > Does anyone have an idea what I may be doing wrong? > > Thanks for your help in advance. > > > On May 11, 4:29 pm, gostones <gosto...@gmail.com> wrote: >> I am running mysql in production but would like to run a simple tests >> in a sqlite in memory db. >> >> The legacy mysql db has tables with columns that are mysql specific >> types, Which are declared in declarative models (subclassing >> declarative_base). I would like to run some simple tests without going >> to mysql and so would need to swap out the columns of the model. >> >> How do I do this? I've tried writing a patcher/unpatcher to swap out >> table in my model, but when I run some tests, I get >> >> OperationalError: (OperationalError) near ")": syntax error u'\nCREATE >> TABLE my_table (\n)\n\n' () >> >> Which makes my think that I am not patching the columns properly. >> >> Does anyone know how I can do this? What am I doing wrong? >> >> Currently, I create new columns and attach brand new Table object to >> __table__ and save the old table. >> >> The DB is created, create_all() is and convert_columns is run in >> setUp. drop_all() and revert_columns is run during tearDown in my >> tests >> >> mysql_sqlite_mapping = {INTEGER: Integer, >> MEDIUMINT: Integer, >> TEXT: text} >> >> def convert_columns(self, my_class, mapping): >> for column in my_class.__table__.columns: >> if type(column.type) in mapping: >> replacement_col = Column(column.name, >> mapping[type(column.type)], >> primary_key=column.primary_key, >> nullable=column.nullable, >> key=column.key, >> unique=column.unique) >> >> converted_columns.append(replacement_col) >> >> self.registry[my_class] = my_class.__table__ >> >> my_class.__table__.metadata.remove(my_class.__table__) >> my_class.__table__ = Table(my_class.__table__.name, >> my_class.__table__.metadata) >> >> for column in converted_columns: >> my_class.__table__.append_column(column) >> >> return my_class >> >> def revert_columns(self, my_class): >> saved_table = self.registry[my_class] >> >> metadata = my_class.__table__.metadata >> my_class.__table__.metadata.remove(my_class.__table__) >> >> model_class.__table__ = Table(saved_table.name, >> metadata) >> >> for column in saved_table.columns: >> column.table = None >> my_class.__table__.append_column(column) >> >> self.registry.pop(my_class) > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalchemy@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.