On Jul 1, 2011, at 8:11 AM, Oltmans wrote: > Greetings, > > First, many thanks for creating such an awesome library. Secondly, I'm > very new to this and I've a basic question. I've a method that looks > like following > > def test_table_load(self): > doctor = Table('TestTable', META, autoload=True, autoload_with=DB) > > > Now while the software runs, this method is called probably 40--50 > times.
> I'm using MySQL and have following questions > > - So if I call test_table_load() 10 times, SQLAlchemy will load the > database table with all records 10 times? "autoload" only loads information about the table itself, i.e. the names and types of columns, and constraints. It doesn't load any rows. The above function will in fact emit the autoload operation only once - on subsequent calls, 'TestTable' will be present in META and it is returned as is. That said, you'd be better off declaring "doctor" just once, somewhere in the module level (or in a function that is called only once) once DB is established: def load_all_tables(DB): global doctor, patient, hospital doctor = Table('doctor', META, autoload=True, autoload_with=DB) patient = Table('patient', META, autoload=True, autoload_with=DB) hospital = Table('hospital', META, autoload=True, autoload_with=DB) # later... DB = create_engine('...') load_all_tables(DB) > - If I want to call test_table_load() 10 times but I want to make sure > SQLAlchemy loads 'TestTable' only once in memory should I replace this > doctor = Table('Doctor', META, autoload=True, autoload_with=DB) > with > doctor = Table('Doctor', META, autoload=True, autoload_with=DB, > keep_existing=True) keep_existing is a flag that indicates if you had other information in Table, i.e. more Column objects or similar, that they should be ignored. Its so that you can say: def _define_table(self): return Table('sometable', metadata, Column('x', Integer), keep_existing=True) and if your application runs in such a way that _define_table() gets called twice, the resulting Table, which remember is the same Table object both times, will only use Column('x') the first time, it wont replace Column('x') with another Column('x'), or in the case of a constraint add a redundant constraint, the second time it is called. -- 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.