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.

Reply via email to