[sqlalchemy] Re: Models split across files

2008-06-24 Thread az

are metadatas same?

On Tuesday 24 June 2008 19:45:46 Matt Haggard wrote:
 In my various models, I recently noticed that I have been reusing
 my customer table as it relates to many other models.  I've been
 making CustomerPart objects in each of the model files and retyping
 the table schema and object (only including the pieces I need for
 that particular case)

 Now I'd like to have one customer model and let the other models
 access it -- rather than continually retyping everything.

 But I get this error when I break it out (this is when I try to use
 it in a controller in pylons):
   raise exceptions.InvalidRequestError(Could not find table '%s'
 with which to generate a foreign key % tname)
 InvalidRequestError: Could not find table 'customer' with which to
 generate a foreign key

 I've included a before and after (hooray for GIT) of the models:

 Thanks!

 Matt



 saq.py before (this one works)
 
 from sqlalchemy import Column, MetaData, Table, types, ForeignKey,
 func
 from sqlalchemy.orm import mapper, relation

 from datetime import datetime

 from formencode import validators
 from smmodels import fe_obj, NoHTML, SuperDateValidator, fe_setter

 metadata = MetaData()

 ...

 customer_table_part = Table('customer', metadata,
 Column('id', types.Integer, primary_key=True, index=True),
 Column('email', types.Unicode, unique=True, index=True),
 Column('validation_type', types.Unicode),
 )

 questionnaire_table = Table('saq_questionnaire', metadata,
 ...
 Column('customer_id', types.Integer, ForeignKey('customer.id'),
 index=True),
 ...
 )

 questions_table = Table('saq_questions_new', metadata,
 ...
 )


 class Questionnaire(fe_setter):

 def __str__(self):
 return 'id: %s customer_id: %s' % (self.id,
 self.customer_id)

 def __repr__(self):
 return Questionnaire(%s, customer_id:%s) % (self.id,
 self.customer_id)


 class Question(fe_setter):
 pass


 class CustomerPart(fe_setter):

 def __init__(self):
 pass


 mapper(Question, questions_table)
 mapper(CustomerPart, customer_table_part)
 mapper(Questionnaire, questionnaire_table, properties={
 ...
 'customer'  :relation(CustomerPart, backref='questionnaires')
 })





 saq.py after (all the same except removed references to
 CustomerPart 
 ...
 from smmodels.customer import customer_table, Customer
 ...

 mapper(Question, questions_table)
 mapper(Questionnaire, questionnaire_table, properties={
 ...
 'customer'  :relation(Customer, backref='questionnaires')
 })


 customer.py after (newly created)
 
 from sqlalchemy import Column, MetaData, Table, types, ForeignKey
 from sqlalchemy.orm import mapper, relation

 from formencode import validators
 from smmodels import fe_obj, NoHTML, fe_setter

 from datetime import date

 metadata = MetaData()

 customer_table = Table('customer', metadata,
 Column('id', types.Integer, primary_key=True, index=True),
 Column('email', types.Unicode, unique=True, index=True),
 Column('validation_type', types.Unicode),
 )

 class Customer(object):

 def __init__(self):
 pass

 mapper(Customer, customer_table)
 


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



[sqlalchemy] Re: Models split across files

2008-06-24 Thread Michael Bayer

using the declarative layer tends to simplify the imports for this  
kind of thing.  Just a thought.


On Jun 24, 2008, at 12:45 PM, Matt Haggard wrote:


 In my various models, I recently noticed that I have been reusing my
 customer table as it relates to many other models.  I've been making
 CustomerPart objects in each of the model files and retyping the table
 schema and object (only including the pieces I need for that
 particular case)

 Now I'd like to have one customer model and let the other models
 access it -- rather than continually retyping everything.

 But I get this error when I break it out (this is when I try to use it
 in a controller in pylons):
  raise exceptions.InvalidRequestError(Could not find table '%s' with
 which to generate a foreign key % tname)
 InvalidRequestError: Could not find table 'customer' with which to
 generate a foreign key

 I've included a before and after (hooray for GIT) of the models:

 Thanks!

 Matt



 saq.py before (this one works)
 
 from sqlalchemy import Column, MetaData, Table, types, ForeignKey,
 func
 from sqlalchemy.orm import mapper, relation

 from datetime import datetime

 from formencode import validators
 from smmodels import fe_obj, NoHTML, SuperDateValidator, fe_setter

 metadata = MetaData()

 ...

 customer_table_part = Table('customer', metadata,
Column('id', types.Integer, primary_key=True, index=True),
Column('email', types.Unicode, unique=True, index=True),
Column('validation_type', types.Unicode),
 )

 questionnaire_table = Table('saq_questionnaire', metadata,
 ...
Column('customer_id', types.Integer, ForeignKey('customer.id'),
 index=True),
 ...
 )

 questions_table = Table('saq_questions_new', metadata,
 ...
 )


 class Questionnaire(fe_setter):

def __str__(self):
return 'id: %s customer_id: %s' % (self.id, self.customer_id)

def __repr__(self):
return Questionnaire(%s, customer_id:%s) % (self.id,
 self.customer_id)


 class Question(fe_setter):
pass


 class CustomerPart(fe_setter):

def __init__(self):
pass


 mapper(Question, questions_table)
 mapper(CustomerPart, customer_table_part)
 mapper(Questionnaire, questionnaire_table, properties={
...
'customer'  :relation(CustomerPart, backref='questionnaires')
 })





 saq.py after (all the same except removed references to CustomerPart
 
 ...
 from smmodels.customer import customer_table, Customer
 ...

 mapper(Question, questions_table)
 mapper(Questionnaire, questionnaire_table, properties={
...
'customer'  :relation(Customer, backref='questionnaires')
 })


 customer.py after (newly created)
 
 from sqlalchemy import Column, MetaData, Table, types, ForeignKey
 from sqlalchemy.orm import mapper, relation

 from formencode import validators
 from smmodels import fe_obj, NoHTML, fe_setter

 from datetime import date

 metadata = MetaData()

 customer_table = Table('customer', metadata,
Column('id', types.Integer, primary_key=True, index=True),
Column('email', types.Unicode, unique=True, index=True),
Column('validation_type', types.Unicode),
 )

 class Customer(object):

def __init__(self):
pass

 mapper(Customer, customer_table)
 


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