you’re getting confused over attributes that refer to foreign key columns and 
attributes that refer to relationships.

if you have a class as:

class Site(Base):

    # …

    fk_school_id = Column(Integer, ForeignKey(‘school.id’))

    school = relationship(School)


then say you have a Site:

        my_site = Site()


you can:

A. assign scalar, typically integer values to the foreign key:

        my_site.fk_school_id = 17

or 


B. assign objects to the relationship attribute:

        my_school = Session.query(School).get(17)

        my_site.school  = my_school


what you’re doing is this:

        my_site.fk_school_id = my_school   #  <— wrong



On Feb 8, 2014, at 7:14 AM, Jude Lucien <jluc...@gmail.com> wrote:

> 
> This approach still doesn't seem to help me.  I get the same error, just 
> about type School:
> 
> 2014-02-08 11:33:59,109 INFO sqlalchemy.engine.base.Engine ROLLBACK
> (ProgrammingError) can't adapt type 'School' 'INSERT INTO site (name, 
> address1, address2, postcode, city, fk_country_id, fk_school_id) VALUES 
> (%(name)s, %(address1)s, %(address2)s, %(postcode)s, %(city)s, 
> %(fk_country_id)s, %(fk_school_id)s) RETURNING site.id' {'city': u'Carddif', 
> 'fk_school_id': <warrior.models.location.School object at 0x9abcf8c>, 'name': 
> u'Choo Site', 'address1': u'1 Choo Way', 'address2': u'', 'postcode': 
> u'12345', 'fk_country_id': u'1'}
> 
> How can I use relationships to do this?  If I do:
> 
> school = School()
> site = Site()
> site.fk_school_id = school
> 
> I get the above error.  If I change school to school.id I get the 
> InstrumentedAttribute error again.
> 
> How to do this without doing multiple commits?
> 
> On 5 February 2014 22:34, Matthew Phipps <matt.the.m...@gmail.com> wrote:
> 
> On Wednesday, February 5, 2014 10:44:39 AM UTC-5, Michael Bayer wrote:
> 
> On Feb 5, 2014, at 9:43 AM, Jude Lucien <jlu...@gmail.com> wrote:
> 
>> I have a secondary problem now having changed my model to use declarative 
>> base - as in db.create_all() does not create my tables in the database. 
>> 
>> How can I do this using the declarative base method?
> 
> Base.metadata is where you’d call create_all(my engine) from.
> 
> 
> @Jude: db.create_all() is part of the Flask-SQLAlchemy API, not SQLAlchemy 
> proper. AFAIK it's ok to mix the two together (the project I'm working on 
> certainly does) but if you're not subclassing db.Model in your models 
> Flask-SQLAlchemy may not be doing you much good. Which is fine, just be aware.
> 
> -Matt
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/sqlalchemy/yl_5BnwzfhA/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> 
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.
> 
> 
> 
> -- 
> "None are more hopelessly enslaved than those who falsely believe they are 
> free"  -- Johann Wolfgang von Goethe
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to