¿Cómo extender la funcionalidad `getter` del asociación_proxy de SQLAlchemy?
Editar Me gustaría modelar una1 to 0:1
relación entreUser
yComment
(un usuario puede tener cero o un comentario). En lugar de acceder al objetoComment
Prefiero acceder directamente al comentario en sí. Usando SQLAlchemysassociation_proxy
funciona perfecto para ese escenarioexcept para una cosa: acceder aUser.comment
antes de tener unComment
asociado. Pero en este caso preferiría esperarNone
en lugar deAttributeError
como resultado
Mira el siguiente ejemplo
import sqlalchemy as sa
import sqlalchemy.orm as orm
from sqlalchemy import Column, Integer, Text, ForeignKey, Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.associationproxy import association_proxy
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(Text)
def __init__(self, name):
self.name = name
# proxy the 'comment' attribute from the 'comment_object' relationship
comment = association_proxy('comment_object', 'comment')
class Comment(Base):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
comment = Column('comment', Text, nullable=False, default="")
user_id = Column(ForeignKey('users.id'), nullable=False, unique=True)
# user_id has to be unique to ensure that a User can not have more than one comments
def __init__(self, comment):
self.comment = comment
user_object = orm.relationship(
"User",
uselist=False, # added after edditing the question
backref=orm.backref('comment_object', uselist=False)
)
if __name__ == "__main__":
engine = sa.create_engine('sqlite:///:memory:', echo=True)
Session = orm.sessionmaker(bind=engine)
Base.metadata.create_all(engine)
session = Session()
Ahora, el siguiente código arroja unAttributeError
:
u = User(name="Max Mueller")
print u.comment
Cuál sería la mejor manera de detectar esa excepción y proporcionar un valor predeterminado en su lugar (como una cadena vacía)?