Hi,

OK - I ran into another thing that I do not understand about
sqlalchemy. I am a newbie, so hopefully this will be
straightforward.

There are two issues here:

ISSUE1:
I create a class called foo w/ a method called name().
I map a table that has a column called 'name' but use
the column_prefix = '_' but I do not see _name get added
to the class! But other labels, such as _phone which do
not have a corresponding method name does get added.

Here's the code:

import sqlalchemy as sa
from sqlalchemy import orm
from sqlite3 import dbapi2 as sqlite

class Foo(object):
    def __init__(self):
        self._myname = 'Bar'

    def name(self):
        return(self._myname)

class FooStore:
    def __init__(self):
        self.metadata = sa.MetaData()

        # table to map class to
        self.t_foo = sa.Table('table_foo', self.metadata,
            sa.Column('id', sa.types.Integer, primary_key=True),
            sa.Column('name', sa.types.String(100)),
            sa.Column('phone', sa.types.String(100))
            )

    def map(self, myfoo):
        'Creates the map. '

        orm.mapper(Foo, self.t_foo, column_prefix = '_')

        # Add foo to the database
        print dir(myfoo) # where did _name go?, _phone is there!

        mf2 = Foo() # ok, let's create a new one.
        print dir(mf2) # same problem

if __name__ == '__main__':
    f = Foo()
    fs = FooStore()
    fs.map(f)


ISSUE2: I have an object that will be given to me that I want to
store into a database. The class definition is located in a package.
When I map this class to a table and set the attribute - I get
an exception:

AttributeError: 'NoneType' object has no attribute 'set'

This can be seen by modifying the above example - where I put
Foo into a package called 'foo':

import sqlalchemy as sa
from sqlalchemy import orm
from sqlite3 import dbapi2 as sqlite

import sys

import foo.Foo as Foo

class FooStore:
    def __init__(self):
        self.metadata = sa.MetaData()

        # table to map class to
        self.t_foo = sa.Table('table_foo', self.metadata,
            sa.Column('id', sa.types.Integer, primary_key=True),
            sa.Column('name', sa.types.String(100)),
            sa.Column('phone', sa.types.String(100))
            )

    def map(self, myfoo):
        'Creates the map. te is the test engine'

        orm.mapper(Foo.Foo, self.t_foo, column_prefix = '_')

        # Add foo to the database

        try:
            myfoo._phone = '555-1212' # exception is thrown!

        except:
            #AttributeError: 'NoneType' object has no attribute 'set'
            print sys.exc_info()

        mf2 = Foo.Foo() # ok, let's create a new one.
        # AttributeError: 'Foo' object has no attribute
'_sa_instance_state'
        myfoo._phone = '555-1212' #

if __name__ == '__main__':
    orm.clear_mappers()
    f = Foo.Foo()
    fs = FooStore()
    fs.map(f)



What's the right way to adapt this class to a table?

Thanks!

-Raj


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

Reply via email to