On May 9, 2007, at 8:27 AM, Antipin Aleksei wrote:

>
> Hi
>
> I'm studying examples of using database in pylons. SQLAlchemy is most
> commonly used here. But I don't understand why most of them use  
> explicit
> column declaration.
> I want to use Postgres database which supports ALTER table statement.
> Following those examples if I need to change column name from
> character(30) to charcater(50) I will have to do it in my code and  
> then
> in pgadmin tool. I would prefer to do it in pgadmin only and my model
> applying those changes automatically.

obviously features like reflection are provided so you dont have to  
deal with that kind of stuff.  however, such a feature doesnt apply  
to every scenario.  if an application is being developed where the  
database schema is not generated by the application, and particularly  
where the database is managed by a DBA down the hallway, id much  
prefer the contract between my application and the actual database to  
be explicit.

>
> I'm trying to get Elixir's reflection working:
>
> #models/user.py
> import pyoner.models as model
> class User(Entity):
>     Entity.table = model.table_user
>
> #models/__init__.py
> from pylons.database import session_context
> from elixir import metadata
> from sqlalchemy import Table, BoundMetaData
> engine = session_context.current.bind_to
>
> table_user = Table('user', BoundMetaData(engine), autoload = True)
>
> Here I have simple table with id, username, password. It seems that
> reflection works, but User.select() ends up with:
> *<class 'sqlalchemy.exceptions.SQLError'>: (ProgrammingError) relation
> "pyoner_models_user_user" does not exist 'SELECT
> pyoner_models_user_user.id AS pyoner_models_user_user_id \nFROM
> pyoner_models_user_user ORDER BY pyoner_models_user_user.id' {}*
>
>
> I use sqlalchemy 0.3.7, elixir 0.3, pylons o.9.6
>
>
> And maybe one could provide some arguments why I should explicitly
> declare tables in my models? Some pros and cons list?

well Elixir is specifically "declarative", where an application lays  
out all the properties it would like its classes to have, and those  
properties in turn map to schema entities...so reflection of the  
table would be the opposite of that....you are "declaring" much less.

When you use reflection and then generate the class attributes from  
that reflected table, youre having the database schema drive not only  
your Table metadata, but the exact specification of your domain  
model.   Which is not a bad thing...but in any application beyond the  
most basic, its typical that a domain model and a database schema are  
divergent entities.  so at that stage things are easier to manage  
when the structure and behavior of classes is explicitly stated  
independently of table schema.

additionally its just basic decoupling of concerns that leads to SA's  
default approach of tables and classes being separate.  a lot of  
people dont want their classes to have any awareness that they are  
part of a certain hierarchy thats tied to persistence, or even to  
have any awareness of their own persistence (like me).



--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to