usually you put the DBSession and such somewhere other than models/__init__.py, like models/meta.py. That way sub-modules and packages of "models" can import the dependencies from meta.py.
structure is like: models/__init__.py: from .model1 import Foo, Bar from .model2 import Bat, Hoho models/meta.py: Base = declarative_base() models/model1/__init__.py: from .foo import Foo from .bar import Bar models/model1/foo.py: from ..meta import Base class Foo(Base): # ... models/model1/bar.py: from ..meta import Base class Bar(Base): # ... models/model2/__init__.py: from .bat import Bat from .hoho import Hoho models/model2/bat.py: from ..meta import Base class Bat(Base): # ... models/model2/hoho.py: from ..meta import Base class Hoho(Base): # ... On Aug 1, 2012, at 2:38 PM, John Anderson wrote: > Do you have an example of an app doing this? > > For instance, if your models/__init__.py declares your DBSession and your > Base: > > # __init__.py > DBSession = scoped_session(session_maker()) > > class BaseModel(object): > pass > > Base = declarative_base(cls=BaseModel) > > you would just import everything after those? i.e > > from app.module1.models import * > from app.module2.models import * > > > then then inside app/module1/__init__.py you would do the imports for all of > its models? > > # app/module1/__init__.py > from app.module1.modules import * > > # app/module1/models.py > from app.models import Base > > class Model1(Base): > pass > > or would you structure it differently? Wouldn't you have issues with > __init__.py importing the modules but the modules needing Base from > __init__.py? > > On Wednesday, August 1, 2012 11:30:43 AM UTC-5, Michael Bayer wrote: > usually the pattern is you just import one module, like "from myapp import > model". "model/__init__.py" then has imports for everything within, and the > pattern repeats as you descend through the directory tree, that is, every top > level __init__.py imports the important bits from within that package. > > the only other way would be to do a find of .py files within a model > directory and then import them with importlib or similar, which is more > complicated, non-deterministic as far as ordering and more prone to import > resolution issues. Adding per-package imports as you go along just creates > this same traversal as part of the code. > > if the Python interpreter is never told of the existence of some .py file, it > doesn't exist. it doesn't matter that "Base" is used in that file, the > classes within don't exist until their owning module is imported. > > > > On Aug 1, 2012, at 12:07 PM, John Anderson wrote: > >> In my pyramid apps I have a create script that generates my database for >> production and a different script that generates my database for my tests. >> >> But if I don't import the module the models are in then they aren't >> discovered even though they all share the same Base which is the class I get >> the metadata from to call create_all, like: >> >> Base.metadata.create_all(engine) >> >> If I import them then they are picked up but I don't want to have to >> remember to import every new module I create. Is there a good way to do >> model discovery for this? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/sqlalchemy/-/r95QN9vJ_IgJ. >> 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 view this discussion on the web visit > https://groups.google.com/d/msg/sqlalchemy/-/7VlbuxrkgBkJ. > 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.