Hallo,
ich habe mal eine Frage zu den Relationships.
Wie auch immer ich meine Tabellen gestalte (Mysql mit InnoDB),
ich bekomme immer diese Meldung:
sqlalchemy.exc.ArgumentError: Could not determine join condition between parent/child tables on relationship MappedProducts.products_notes. Specify a 'primaryjoin' expression. If this is a many-to-many relationship, 'secondaryjoin' is needed as well.
Ich würde eben gerne eine 1:n - Relation so abbilden.
Wisst ihr wie das geht?
Liebe GRüße
Chris
SQLAlchemy/Soup: Relationships
@sprudel: SQLAlchemy kann halt nicht automatisch heraus finden über welche Attribute die beiden Tabellen denn nun eigentlich verbunden sind. Das musst Du angeben.
Ich habe nicht so recht verstanden wie ich das angeben kann.
Auch habe ich über Google und die Forensuche keine Beispiele gefunden.
Überall im Netz funktioniert es auch ohne diese Angabe :-/
Kann mir wer sagen, wie die Syntax dafür ist?
Auch habe ich über Google und die Forensuche keine Beispiele gefunden.
Überall im Netz funktioniert es auch ohne diese Angabe :-/
Kann mir wer sagen, wie die Syntax dafür ist?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Zeig uns doch mal Deinen bisherigen Code. das dürfte einfacher sein, dafür die entsprechenden Ergänzungen vorzunehmen, als ein triviales Drittbeispiel zu schustern - zumal es dafür sicherlich viele Beispiele im Netz geben dürfte. In der SQLAlchemy-Doku muss doch dazu etwas drin stehen. Ich kenne diese Soup-Aufsatz nicht, aber da es nur ein Aufsatz ist, können die grundlegenden Prinzipien ja nicht ausgehebelt werden. Zumal in der Doku dazu ja auch etwas diesbezüglich stehen sollte.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Habe noch keinen konkret funktionierenden Code, sondern nur eine Beispieldatenbank.
In dem Fall gibt es products und product_notes
da dan:
database.db.products.relacte("product_notes",database.db.product_notes)
Und da entsteht dabei dann diese Meldung
Bei den DAtenbanken hat jeweils das Feld "pid" den Primärschlüssel, eine Beziehung ist im Designer von PHPMyadmin erstellt worden.
In dem Fall gibt es products und product_notes
da dan:
database.db.products.relacte("product_notes",database.db.product_notes)
Und da entsteht dabei dann diese Meldung
Bei den DAtenbanken hat jeweils das Feld "pid" den Primärschlüssel, eine Beziehung ist im Designer von PHPMyadmin erstellt worden.
@sprudel: Es ist echt mühsam Dir die Informationen zu entlocken. Nun kennen wir die Tabellennamen und wissen, dass die beide eine 'pid' als Primärschlüssel haben. Und wir stellen uns die gleiche Frage wie SQLAlchemy auch: wie heisst denn nun der Fremdschlüssel in 'product_notes'?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
(K.A. wie das mittlerweile bei den zig Dutzend Speicher-Formaten bei MySQL ist, aber es gibt ja in SQL tatsächlich eine Fremdschlüsseldeklaration, die das automatisierte Zuordnen erlauben sollte. Da stellt sich mir recht Offtopic die Frage, inwiefern SQLAlchemy aus Konsistenzgründen (kleinster gemeinsamer Standard) darauf verzichten will oder ob es das sogar tatsächlich erkennen kann?)BlackJack hat geschrieben:Und wir stellen uns die gleiche Frage wie SQLAlchemy auch: wie heisst denn nun der Fremdschlüssel in 'product_notes'?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Hyperion: Wenn die ordentlich deklariert und eindeutig sind, kann SA das eigentlich erkennen. Ich musste das bisher immer nur in mehrdeutigen Fällen explizit sagen. Zum Beispiel bei einer 'personen'-Tabelle die 'wohnsitz_id' und 'zweitwohnsitz_id' als Fremdschlüssel in eine 'adressen'-Tabelle hatte. Wenn ich da nun sage ich möchte eine Beziehung mit Namen 'xyz' zwischen 'personen' und 'adressen', weiss SA natürlich nicht über welchen der beiden Fremdschlüssel ich die nun gerne hätte.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
@sprudel: Wenn's so nicht geht, nimm' doch einen manuelle Join
Gruß, noisefloor
IMHO stimmt die Syntax nicht... entweder ist "database" oder "db" zu viel...database.db.products.relacte("product_notes",database.db.product_notes)
@sprudel: Wenn's so nicht geht, nimm' doch einen manuelle Join
Gruß, noisefloor