Bạn có hai lựa chọn. Bạn có thể vượt qua điều kiện tham gia trong join
như vậy:
j = join(users, comments, onclause=users.c.id == commends.c.user_id)
Nếu bạn đang xác định điều này theo nghĩa của một orm.relationship
thuộc tính, tham số từ khóa sẽ là primaryjoin
thay vì onclause
.
Tuy nhiên, cách tiếp cận mà tôi thích là chỉ nói dối . Thông báo cho SQLAlchemy rằng có khóa ngoại, mặc dù không có.
comments = Table('comments', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('users.id')),
...
)
SQLAlchemy sẽ tiến hành như thể khóa ngoại thực sự có mặt, mặc dù cơ sở dữ liệu thực tế không có điều đó. Tất nhiên, bạn có thể gặp rắc rối nếu ràng buộc khóa foriegn ngụ ý bị vi phạm (comments.user_id
khi không có users.id
tương ứng ), nhưng dù sao thì bạn cũng có thể gặp rắc rối.