* Why do you use a DynamicMetaData with threadlocal=False? Because this way, people using a single database (ie engine) *per metadata object* can skip connecting the metadata object(s) to their engine(s) in each thread. We felt this was the most common case and provided the sanest default behavior. Now if you use several databases (ie. you use several different engines), you have the same tables in all your databases (ie. you want to use the same metadata object for several of those databases) AND work in a multi-threaded environment, you may not use the default metadata object provided by Elixir. You can still do want by simply creating another metadata object the way you like (probably a plain DynamicMetaData) and use that metadata for all your entities.