I'm rather new to both Python and SQLAlchemy.  I have been trying to create 
a class with a function to populate the name field based on values in 
related tables.  A good example would be Diablo 2 item generation.  Please 
note the following code is not really meant to work, it is just a very 
basic example what I am trying to accomplish.

class Prefix(Base):
    pk = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(String(20))
    
class Suffix(Base):
    pk = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(String(20))

class Item(Base):
    pk = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(String(20))

class MagicItem(Base)
    # has 1 prefix, 1 suffix, 1 Item
    
    pk = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(String(20))
    
    prefix_fk = Column(ForeignKey('prefix.pk'))
    suffix_fk = Column(ForeignKey('suffix.pk'))
    item_fk = Column(ForeignKey('item.pk'))
    
    prefix = relationship("Prefix")
    suffix = relationship("Suffix")
    item = relationship("Item")
    
    @classmethod
    set_name(cls):
        # set to prefix.name + " " + item.name + " " + suffix.name
        return

Is an @classmethod the right way to do this?   

I can't seem to just use cls.<column name> to reference the actual object 
values.  For example, if I were the following side the set_name() function 
call:
print(cls.prefix_fk)  
> MagicItem.prefix_fk

I do not get 1, like I would expect.  It is printing the table.column name, 
but not the value of that column for the object that called the function.

I was able to work around this by querying like so:
prefix = cls.session.query(Prefix.name).filter_by(pk=cls.prefix_fk).scalar()

Note: the cls.session is inherited from my base object similar to 
Magic.py.  (http://techspot.zzzeek.org/2011/05/17/magic-a-new-orm/)
This works great, until I go to add a second object... then the scalar 
returns more than one and explodes.

I did a lot of reading, but just can't seem to make it work.

    

-- 
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/d/optout.

Reply via email to