ganz kurze Vorgeschichte:
.accdb File --> import der Tabellen mit pyodbc --> snapshot und Konvertierung zu sqlite3 Datenbank --> sqlalchemy automap() --> Definition der Beziehungen --> Problem mit der verknüpften Abfrage von Werten aus anderen Tabellen!
Zur Veranschaulichung hab ich mir mal ein kleines Codebeispiel ausgedacht. Es sind mehrere Indextabellen vorhanden, welche nur zum Nachschalgen der entsprechenden Strings verwendet werden.
zB. Doors (ID-1, name-Eichentür)
Code: Alles auswählen
Base = automap_base()
engine = create_engine('sqlite///sql.db', echo = False)
class Doors(Base):
__tablename__ 'tblDoors'
ID = Column(Integer, primaray_key = True)
name = Column(String(10))
class Windows(Base):
__tablename__ 'tblWindows'
ID = Column(Integer, primaray_key = True)
name = Column(String(10))
class House(Base):
__tablename__ 'tblHouse'
ID = Column(Integer, primaray_key = True)
Doors = Column(Integer, ForeignKey('tblDoors.ID'), nullable=False)
Doors_rel = relationship(Doors, backref=backref('idk', uselist=True, cascade='delete,all'))
Windows = Column(Integer, ForeignKey('tblDoors.ID'), nullable=False)
Win_rel = relationship(Doors, backref=backref('idk', uselist=True, cascade='delete,all'))
Base.prepare(engine, reflect=True)
#additional classes
#plates = Base.classes['00_plates']
s = Session(engine)
for part in s.query(House.Doors, House.Windows).distinct():
print(part)
Ich möchte mir nun zum Beispiel alle Kombinationen von Fenstern und Türen anzeigen lassen.
Also zum Beispiel:
Eichentüre-Birkenfenster
EIchentüre-Kunststofffenster
...
Die oben gezeigte Abfrage der Kombinationen als Zahlenreihe funktioniert soweit. Nur schaffe ich es bisher nicht die Strings auf einfache Weise nachzuschlagen.
Ich hätte beispielsweise print(part.Doors_rel.name ) versucht.
Die Ausgabe funktioniert leider nicht, da part keine Informationen über die Beziehung mehr enthält....
Ich habe bisher einige andere Möglichkeiten für Abfragen ganz ohne vorher definierte Beziehung gefunden:
https://docs.sqlalchemy.org/en/latest/orm/tutorial.html
Nur wenn ich mir schon die Arbeit mache das ganze vorher in Objekten zu definieren, würde ich es gerne auch entsprechend "einfach" abfragen können...
Eine weitere für mich sehr interessante Abfrage wären auch die ID-Blöcke aller gleichartiger Kombinationen in Blöcken.
Zum Beispiel in Verbindung mit allen Rechnungsnummern der Kombination Eichentüre-Birkenfenster.
Als Ausgabeformat eignet sich zum Beispiel ein Wörterbuch mit
{"Eichentüre-Birkenfenster" :[1,105,3008]
"EIchentüre-Kunststofffenster":[1005,300]}
Kann mir jemand bei diesem Problem helfen?