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 [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.
>
>
>

-- 
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 [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