Hi All,
I'm trying to replace string definitions prgrammatically where possible.
I have the following working:
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
import pprint
Base = declarative_base()
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
children = relationship("Child", backref=__tablename__)
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey('parent.id'))
p = Parent()
pprint.pprint('p table name: {}'.format(p.__tablename__))
c = Child()
pprint.pprint('c table name: {}'.format(c.__tablename__))
c.parent = p
pprint.pprint('Children: {}'.format(p.children))
pprint.pprint('Parent: {}'.format(c.parent))
But I'd like to follow the mixin example from the docs to inherit common
columns and a function for __tablename__ via the Common class.
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import declared_attr
import pprint
from inflection import underscore
class Common(object):
@declared_attr
def __tablename__(cls):
return underscore(cls.__name__)
id = Column(Integer, primary_key=True)
Base = declarative_base(cls=Common)
class Parent(Base):
children = relationship("Child", backref=__tablename__)
class Child(Base):
parent_id = Column(Integer, ForeignKey('parent.id'))
p = Parent()
pprint.pprint('p table name: {}'.format(p.__tablename__))
c = Child()
pprint.pprint('c table name: {}'.format(c.__tablename__))
c.parent = p
pprint.pprint('Children: {}'.format(p.children))
pprint.pprint('Parent: {}'.format(c.parent))
I cannot figure out how to refer to the __tablename__ property in backref
using this model. If I refer to Base.__tablename__ or
Common.__tablename__, it gets the wrong value. Can you help me fix this?
Thanks,
Rob
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.