Wie man den Alias ​​wiederverwendet, der zuvor zu einer anderen Beziehung zu einer anderen Beziehung in Sqlalchemy 2 herPython

Python-Programme
Anonymous
 Wie man den Alias ​​wiederverwendet, der zuvor zu einer anderen Beziehung zu einer anderen Beziehung in Sqlalchemy 2 her

Post by Anonymous »

Ich habe ein Modell mit diesen Attributen: < /p>

Code: Select all

class VInterlocutori(Base):
__tablename__ = 'v_interlocutori'

origine: Mapped[str] = mapped_column(String(10), nullable=False, primary_key=True)
origine_id: Mapped[str] = mapped_column(Integer, nullable=False, primary_key=True)
descrizione: Mapped[str] = mapped_column(String(50), nullable=False)
descrizione_breve: Mapped[str] = mapped_column(String(25), nullable=False)
.
.
.

class Causali(Base):
__tablename__ = 'causali'

id: Mapped[int] = mapped_column(Integer, nullable=False, primary_key=True)
descrizione: Mapped[str] = mapped_column(String(50), nullable=False)
valoremax: Mapped[Decimal] = mapped_column(Numeric(8, 3), nullable=False, default=0)
costomax: Mapped[Decimal] = mapped_column(Numeric(8, 3), nullable=False, default=0)
numeratore: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
origineinterlocutore: Mapped[str] = mapped_column(String(10), nullable=False)
.
.
.

class ListeTestata(Base):
__tablename__ = 'liste_testata'

id: Mapped[int] = mapped_column(Integer, nullable=False, primary_key=True)
idcausale: Mapped[int] = mapped_column(Integer, ForeignKey(Causali.id), nullable=False)
idinterlocutore: Mapped[int] = mapped_column(Integer, ForeignKey(VInterlocutori.origine_id), nullable=False)
origine: Mapped[str] = mapped_column(String(3), ForeignKey(VNegoziMagazzini.cod_negozio), nullable=False)
datacreazione: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=func.now())

causale: Mapped[Causali] = relationship(Causali, lazy="joined")
interlocutore: Mapped[VInterlocutori] = relationship(VInterlocutori, lazy="joined",
primaryjoin=and_(idinterlocutore ==
foreign(VInterlocutori.origine_id),
foreign(Causali.origineinterlocutore) ==
VInterlocutori.origine)
)
< /code>
Auf meiner Fastapi -Route fege ich diese Abfrage aus: < /p>
@app.route(/)
def get_liste(db: Session):
try:
qry_liste = select(ListeTestata).where(ListeTesta.id == 2)
rcds_liste = db.execute(qry_liste)
except SQLAlchemyError as e:
log.logger(e)
raise HTTPException(500, "Internal error")
else:
return rods_liste
< /code>
Aber wenn Sqlalchemy die Abfrage erstellt, ist das Ergebnis:  < /p>
SELECT listearticoli.liste_testata.id,
listearticoli.liste_testata.idcausale,
listearticoli.liste_testata.idinterlocutore,
listearticoli.liste_testata.origine,
listearticoli.liste_testata.datacreazione,
listearticoli.liste_testata.stato,
listearticoli.liste_testata.idcalendario,
listearticoli.liste_testata.identificativo,
listearticoli.liste_testata.idzona,
listearticoli.liste_testata.idcategoria,
listearticoli.liste_testata.idrepartodes,
v_interlocutori_1.origine          AS origine_2,
v_interlocutori_1.origine_id,
v_interlocutori_1.descrizione      AS descrizione_2,
v_interlocutori_1.descrizione_breve,
v_interlocutori_1.indirizzo,
v_interlocutori_1.cap,
v_interlocutori_1.comune,
v_interlocutori_1.provincia,
v_interlocutori_1.codice_fiscale,
v_interlocutori_1.partita_iva,
v_interlocutori_1.active,
v_interlocutori_1.info_agg_01,
v_interlocutori_1.info_agg_02,
v_interlocutori_1.reso_diretto,
FROM listearticoli.liste_testata
LEFT OUTER JOIN ods.v_negozi_magazzini AS v_negozi_magazzini_1
ON v_negozi_magazzini_1.cod_negozio = listearticoli.liste_testata.origine
LEFT OUTER JOIN listearticoli.causali AS causali_1 ON causali_1.id = listearticoli.liste_testata.idcausale
LEFT OUTER JOIN ods.v_interlocutori AS v_interlocutori_1
ON v_interlocutori_1.origine_id = listearticoli.liste_testata.idinterlocutore AND listearticoli.causali.origineinterlocutore = v_interlocutori_1.origine
where listearticoli.liste_testata = 2
Sie können sehen, dass der join v_interlocutore sqlalchemy nicht den alias causali_1 verwendet, sondern direkt die listrearticoli.liste_Testata .

Code: Select all

SELECT listearticoli.liste_testata.id,
listearticoli.liste_testata.idcausale,
listearticoli.liste_testata.idinterlocutore,
listearticoli.liste_testata.origine,
listearticoli.liste_testata.datacreazione,
listearticoli.liste_testata.stato,
listearticoli.liste_testata.idcalendario,
listearticoli.liste_testata.identificativo,
listearticoli.liste_testata.idzona,
listearticoli.liste_testata.idcategoria,
listearticoli.liste_testata.idrepartodes,
v_interlocutori_1.origine          AS origine_2,
v_interlocutori_1.origine_id,
v_interlocutori_1.descrizione      AS descrizione_2,
v_interlocutori_1.descrizione_breve,
v_interlocutori_1.indirizzo,
v_interlocutori_1.cap,
v_interlocutori_1.comune,
v_interlocutori_1.provincia,
v_interlocutori_1.codice_fiscale,
v_interlocutori_1.partita_iva,
v_interlocutori_1.active,
v_interlocutori_1.info_agg_01,
v_interlocutori_1.info_agg_02,
v_interlocutori_1.reso_diretto,
FROM listearticoli.liste_testata
LEFT OUTER JOIN ods.v_negozi_magazzini AS v_negozi_magazzini_1
ON v_negozi_magazzini_1.cod_negozio = listearticoli.liste_testata.origine
LEFT OUTER JOIN listearticoli.causali AS causali_1 ON causali_1.id = listearticoli.liste_testata.idcausale
LEFT OUTER JOIN ods.v_interlocutori AS v_interlocutori_1
ON v_interlocutori_1.origine_id = listearticoli.liste_testata.idinterlocutore AND
causali_1.origineinterlocutore = v_interlocutori_1.origine
WHERE listearticoli.liste_testata = 2
Gibt es eine Möglichkeit, SQLAlchemy zu zwingen, die bereits erstellten alias causali_1 zur Beziehung von Interlocutore in ListEtestata Modell? Kann mir jemand helfen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post