tables quick in_ guide example create python sqlalchemy pyramid relationships

python - quick - SQLAlchemy no puede encontrar un nombre de clase



sqlalchemy python (2)

Simplificado, tengo la siguiente estructura de clase (en un solo archivo):

Base = declarative_base() class Item(Base): __tablename__ = ''item'' id = Column(BigInteger, primary_key=True) # ... skip other attrs ... class Auction(Base): __tablename__ = ''auction'' id = Column(BigInteger, primary_key=True) # ... skipped ... item_id = Column(''item'', BigInteger, ForeignKey(''item.id'')) item = relationship(''Item'', backref=''auctions'')

Me sale el siguiente error de esto:

sqlalchemy.exc.InvalidRequestError InvalidRequestError: When initializing mapper Mapper|Auction|auction, expression ''Item'' failed to locate a name ("name ''Item'' is not defined"). If this is a class name, consider adding this relationship() to the Auction class after both dependent classes have been defined.

No estoy seguro de cómo Python no puede encontrar la clase Item, ya que incluso cuando se pasa la clase, en lugar del nombre como una cadena, recibo el mismo error. He estado luchando para encontrar ejemplos de cómo hacer relaciones simples con SQLAlchemy así que si hay algo bastante obvio, me disculpo.


Además, a pesar de que esto no se aplica al OP, para cualquier persona que aterrice aquí que haya recibido el mismo error, verifique que ninguno de los nombres de sus tablas contenga guiones.

Por ejemplo, una tabla llamada "movie-genres" que luego se usa como secundaria en una relación SQLAlchemy generará el mismo error "name ''movie'' is not defined" , porque solo se leerá hasta el guión. Cambiar a guiones bajos (en lugar de guiones) resuelve el problema.


Todo esto resultó ser la forma en que configuré a SQLAlchemy en Pyramid. Esencialmente, debe seguir esta sección a la letra y asegurarse de usar la misma instancia de declarative_base que la clase base para cada modelo.

Tampoco estaba vinculando un motor de base de datos a mi DBSession cual no le molesta hasta que intenta acceder a los metadatos de la tabla, lo que sucede cuando usa relaciones.