Beziehungen, die auf zusammengesetzte Schlüssel mit sqlalchemy
Habe ich dieses einfache Modell der Autor - Bücher und kann nicht einen Weg finden, um Vorname und Nachname einen zusammengesetzten Schlüssel und verwenden Sie es in Beziehung zu setzen. Irgendwelche Ideen?
from sqlalchemy import create_engine, ForeignKey, Column, String, Integer
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('mssql://user:pass@library')
engine.echo = True
session = sessionmaker(engine)()
class Author(Base):
__tablename__ = 'authors'
firstName = Column(String(20), primary_key=True)
lastName = Column(String(20), primary_key=True)
books = relationship('Book', backref='author')
class Book(Base):
__tablename__ = 'books'
title = Column(String(20), primary_key=True)
author_firstName = Column(String(20), ForeignKey('authors.firstName'))
author_lastName = Column(String(20), ForeignKey('authors.lastName'))
InformationsquelleAutor der Frage mdob | 2011-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie definiert haben, die jeweils die abhängigen Spalten als Fremdschlüssel getrennt, wenn das ist nicht wirklich das, was Sie wollen, Sie wollen natürlich einen zusammengesetzten Fremdschlüssel. Sqlalchemy ist, reagiert darauf mit den Worten (in einer nicht sehr klaren Art und Weise), dass es nicht erraten, die Fremdschlüssel zu verwenden (
firstName
oderlastName
).Die Lösung, die Deklaration eine zusammengesetzte Fremdschlüssel, ist ein bisschen klobig im deklarativen, aber immer noch ziemlich offensichtlich:
Die wichtige Sache hier ist, dass die
ForeignKey
Definitionen sind verschwunden aus den einzelnen Spalten, und eineForeignKeyConstraint
Hinzugefügt__table_args__
Klasse variable. Mit dieser, dierelationship
definiertAuthor.books
arbeitet, gerade Recht.InformationsquelleAutor der Antwort SingleNegationElimination