Пытаясь изучить Flask, я создаю простой клон Twitter. Это будет включать возможность для пользователя подписаться на других пользователей. Я пытаюсь настроить реляционную базу данных через SQLAlchemy, чтобы это разрешить.
Я подумал, что мне понадобятся отношения «многие ко многим» для пользователя с самооценкой. Следуя документации SQLAlchemy Я пришел к:
#imports omitted
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///twitclone.db'
db = SQLAlchemy(app)
Base = declarative_base()
user_to_user = Table("user_to_user", Base.metadata,
Column("follower_id", Integer, ForeignKey("user.id"), primary_key=True),
Column("followed_id", Integer, ForeignKey("user.id"), primary_key=True)
)
class User(db.Model):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String, unique=False)
handle = Column(String, unique=True)
password = Column(String, unique=False)
children = relationship("tweet")
following = relationship("user",
secondary=user_to_user,
primaryjoin=id==user_to_user.c.follower_id,
secondaryjoin=id==user_to_user.c.followed_id,
backref="followed_by"
)
#Tweet class goes here
db.create_all()
if __name__ == "__main__":
app.run()
Запуск этого кода приводит к созданию базы данных без сообщений об ошибках. Однако вся часть (таблица), соединяющая пользователя с пользователем, просто опускается. Это определение таблицы User:
CREATE TABLE user (
id INTEGER NOT NULL,
name VARCHAR,
handle VARCHAR,
password VARCHAR,
PRIMARY KEY (id),
UNIQUE (handle)
)
Почему SQLAlchemy не создает для пользователя отношения со ссылками на себя?
примечание: я новичок как во Flask, так и в SQLAlchemy, и здесь может отсутствовать что-то очевидное.