On Tue, Mar 22, 2011 at 3:58 PM, Michael Bayer <[email protected]> wrote:
>
> On Mar 22, 2011, at 3:56 PM, Jay Pipes wrote:
>
>> On Tue, Mar 22, 2011 at 3:12 PM, Michael Bayer <[email protected]> 
>> wrote:
>>> if you say this:
>>>
>>> Table('sometable', MetaData(), autoload=True, autoload_with=some_engine)
>>>
>>> its not looking for "changes", its reflecting the entire form of that table 
>>> brand new, each time. This because the MetaData() object is empty.  If OTOH 
>>> you were to call the"Table()" constructor multiple times with the same 
>>> table name and the *same* MetaData object, nothing happens on the second 
>>> try - the existing Table is used.   The example code you had seems to be 
>>> doing the former, reflecting each time on MetaData().     So it is calling 
>>> "PRAGMA table_info(tablename)" each time.
>>>
>>> As far as why it fails in your specific case, I couldn't say for sure, but 
>>> it seems possible that Migrate's practice of dropping the whole table, 
>>> copying to a temp table, then copying back to the original table may be 
>>> part of the problem.  Perhaps the pysqlite or sqlite3 does not see the 
>>> proper state when PRAGMA table_info() is used.    Turning on echo='debug' 
>>> would illustrate the full SQL conversation occurring with the SQLite 
>>> database.
>>
>> The test case executes the command `sqlite3
>> glance_test_migration.sqlite ".schema images"` directly after doing:
>>
>> images_table = Table('images', MetaData(), autoload=True,
>> autoload_with=self.engine)
>>
>> As you can see from the output of the test case, the images_table.c
>> contains different columns than what is output by the sqlite3 command.
>> That is why I think it's an SA problem and nothing to do with the
>> migrate script.
>
> Running with "sqlite3" executes a brand new process with all new state, 
> whereas using "engine" uses a SQLite connection that has remained established 
> throughout the entire conversation.

That was my whole point, Michael. Why doesn't the engine show the
changes that were made to the SQLite database, but it *does* show the
changes that were made to the MySQL database? Is this a case of the
SQLite engine and MySQL engines differing on how they cache metadata?

> Did you run with echo='debug' yet ?

Yes. It just shows a bunch of PRAGMA statements when run with SQLite
and SHOW CREATE TABLE statements when run with MySQL.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to