#python #database #sqlite #sqlalchemy
#python #База данных #sqlite #sqlalchemy
Вопрос:
Итак, у меня есть эти два простых класса внутри одного и того же файла python, который я пытаюсь сопоставить с помощью SQLAlchemy, где пользовательский столбец ‘password_id’ также является внешним ключом к столбцу пароля таблицы ‘password_id’
from sqlalchemy.orm import relationship, declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.sql.schema import ForeignKey
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
user_id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
password_id = Column(Integer, ForeignKey('password.password_id'))
parent = relationship("Password", back_populates="users")
class Password(Base):
__tablename__ = 'passwords'
password_id = Column(Integer, primary_key=True)
password = Column(String)
last_change_date = Column(DateTime)
valid_until = Column(DateTime)
child = relationship("User", back_populates="passwords", uselist=False)
Вот схема БД для контекста:
Я следую этому руководству из sql alchemy, но по какой-то причине я продолжаю получать сообщение об ошибке из заголовка «Убедитесь, что ссылочные столбцы связаны с ForeignKey или ForeignKeyConstraint, или укажите выражение ‘primaryjoin’.’, что странно, потому что в соответствии с тем, что я вижу в руководстве, мои классы былисопоставлено правильно, поэтому я не могу понять, почему возникает эта ошибка.
Заранее благодарю вас
Комментарии:
1. Не добавляйте отношения в оба класса. Добавьте связь только в класс паролей и удалите ее из класса пользователей
2. @HashirIrfan почему это? Разве пароли и пользователи не должны иметь взаимную привязку? Руководство, на которое я ссылался в сообщении, показывает, что и родительский, и дочерний элементы должны иметь отношения
3. Вы использовали обратные ссылки, чтобы получить к нему доступ через пользователя и пароль. Итак, вам просто нужно определить связь один раз
Ответ №1:
Я думаю, что проблема в следующей строке (имя таблицы в ForeignKey)…
password_id = столбец (целое число, ForeignKey(‘password.password_id’))
вместо пароля должны быть пароли.
Комментарии:
1. Это было оно! Сложный синтаксис… Спасибо!