Я не эксперт по базам данных - я просто знаю основы, правда. Я выбрал SQLAlchemy для небольшого проекта и использую декларативную базовую конфигурацию, а не «нормальный» способ. Этот способ кажется намного проще.
Однако, настраивая схему базы данных, я понял, что не понимаю некоторые концепции отношений с базой данных.
Если бы у меня были отношения многие-к-одному, например, статьи авторов (где каждая статья могла быть написана только одним автором), я бы поместил поле author_id
в свой столбец articles
. Но у SQLAlchemy есть этот объект ForeignKey и функция отношений с обратным kwarg, и я понятия не имею, что это значит.
Мне страшно узнать, как выглядит отношение «многие ко многим» с промежуточной таблицей (когда мне нужны дополнительные данные о каждом отношении).
Может кто-нибудь демистифицировать это для меня? Прямо сейчас я настраиваю, чтобы позволить openID auth для моего приложения. Итак, у меня есть это:
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 = #?
Я думаю, что ?
следует заменить на Column(Integer, ForeignKey('users.id'))
, но я не уверен - и нужно ли ставить openids = relationship("OpenID", backref="users")
в классе Users? Зачем? Что оно делает? Что такое обратная ссылка?