Tôi không có chuyên gia về cơ sở dữ liệu - tôi chỉ biết những điều cơ bản, thực sự. Tôi đã chọn SQLAlchemy cho một dự án nhỏ và tôi đang sử dụng cấu hình cơ sở khai báo thay vì cách "bình thường". Cách này có vẻ đơn giản hơn rất nhiều.các mối quan hệ SQLAlchemy đơn giản hoạt động như thế nào?
Tuy nhiên, trong khi thiết lập lược đồ cơ sở dữ liệu của tôi, tôi nhận ra rằng tôi không hiểu một số khái niệm mối quan hệ cơ sở dữ liệu.
Nếu tôi có mối quan hệ nhiều người, ví dụ, bài viết của tác giả (mỗi bài viết có thể được viết bởi một tác giả), tôi sẽ đặt trường author_id
trong cột articles
của tôi. Nhưng SQLAlchemy có đối tượng ForeignKey này, và một hàm quan hệ với một backw kwarg, và tôi không có ý tưởng gì về nó MEANS.
Tôi sợ phải tìm ra mối quan hệ nhiều - nhiều với bảng trung gian như thế nào (khi tôi cần thêm dữ liệu về mỗi mối quan hệ).
Ai đó có thể làm rõ điều này cho tôi không? Ngay bây giờ tôi đang thiết lập để cho phép auth openID cho ứng dụng của tôi. Vì vậy, tôi đã nhận điều này:
from __init__ import Base
from sqlalchemy.schema import Column
from sqlalchemy.types import Integer, String
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String, unique=True)
email = Column(String)
password = Column(String)
salt = Column(String)
class OpenID(Base):
__tablename__ = 'openid'
url = Column(String, primary_key=True)
user_id = #?
Tôi nghĩ rằng ?
nên được thay thế bởi Column(Integer, ForeignKey('users.id'))
, nhưng tôi không chắc chắn - và tôi cần phải đặt openids = relationship("OpenID", backref="users")
trong lớp Người dùng? Tại sao? Nó làm gì? Một backref là gì?
Câu trả lời hay, cảm ơn bạn. Tôi ngạc nhiên quá lâu, và không ai khác trả lời ... Có vẻ như có nhiều thứ mà mọi người sẽ biết. Oh well :) –
Đây là một câu trả lời tuyệt vời, rất rõ ràng. Tôi cũng thích mã tự viết. Với hiệu ứng đó, SQLAlchemy, kể từ 0.5.1, cung cấp một thay thế cho 'backref' là [' back_populates'] (http://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm. relationship.params.back_populates). Các tài liệu trình bày rõ hơn và ví dụ: http://docs.sqlalchemy.org/en/latest/orm/backref.html#relationships-backref – iled