tutorial make libreria leer etree con archivo python sqlalchemy attributeerror

make - tree xpath python



AttributeError durante la consulta: ni el objeto ''InstrumentedAttribute'' ni el ''Comparator'' tienen un atributo (4)

Esto se debe a que está intentando acceder a la bar desde la clase FooBar lugar de una instancia de FooBar . La clase FooBar no tiene ningún objeto de bar asociado a ella: la bar es solo un atributo instrumentado sqlalchemy. Por eso te sale el error:

AttributeError: Neither ''InstrumentedAttribute'' object nor ''Comparator'' object associated with FooBar.bar has an attribute ''foo''

Obtendrá el mismo error al escribir FooBar.bar.foo.name fuera de la consulta sqlalchemy.

La solución es llamar a la clase Foo directamente:

ses.query(FooBar).filter(Foo.name == "blah")

El siguiente código:

Base = declarative_base() engine = create_engine(r"sqlite:///" + r"d:/foo.db", listeners=[ForeignKeysListener()]) Session = sessionmaker(bind = engine) ses = Session() class Foo(Base): __tablename__ = "foo" id = Column(Integer, primary_key=True) name = Column(String, unique = True) class Bar(Base): __tablename__ = "bar" id = Column(Integer, primary_key = True) foo_id = Column(Integer, ForeignKey("foo.id")) foo = relationship("Foo") class FooBar(Base): __tablename__ = "foobar" id = Column(Integer, primary_key = True) bar_id = Column(Integer, ForeignKey("bar.id")) bar = relationship("Bar") Base.metadata.create_all(engine) ses.query(FooBar).filter(FooBar.bar.foo.name == "blah")

me esta dando este error

AttributeError: Neither ''InstrumentedAttribute'' object nor ''Comparator'' object associated with FooBar.bar has an attribute ''foo''

¿Alguna explicación sobre por qué está sucediendo esto y una guía sobre cómo podría lograrse tal cosa?


No puedo explicar técnicamente lo que sucede pero puede solucionar este problema utilizando:

ses.query(FooBar).join(Foobar.bar).join(Bar.foo).filter(Foo.name == "blah")


Recibía el mismo error. Neither ''InstrumentedAttribute'' object nor ''Comparator'' has an attribute , pero en mi caso, el problema era que mi modelo contenía una columna llamada query , que sobrescribía la propiedad interna model.query .

Decidí cambiar el nombre de esa columna a query_text y eso eliminó el error. Alternativamente, pasar el name= argumento al método de Columna hubiera funcionado: query = db.Column(db.TEXT, name=''query_text'') .


Un error relacionado que puede ser causado al configurar incorrectamente las relaciones de SQLAlchemy:

AttributeError: Neither ''Column'' object nor ''Comparator'' object has an attribute ''corresponding_column''

En mi caso, definí incorrectamente una relación como esta:

namespace = relationship(PgNamespace, id_namespace, backref="classes")

El argumento id_namespace para relationship() simplemente no debería estar allí. SQLAlchemy está tratando de interpretarlo como un argumento de un tipo diferente, y está fallando con un error inescrutable.