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