Я пытаюсь добавить существующего пользователя из postgresql БД в существующее место в postgresql БД в следующей модели (многие к одному):
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(Text)
place_id = Column(Integer, ForeignKey('places.id'))
user_place = relationship("Place", back_populates="users")
def __init__(self, name, place_id):
self.name = name
class Place(Base):
__tablename__ = 'places'
id = Column(Integer, primary_key=True)
name = Column(Text)
code = Column(Text)
users = relationship("User", back_populates="user_place")
def __init__(self, name, code):
self.name = name
self.code = code
После запроса поместите строку и строку пользователя из БД, как показано ниже:
>>> place=session.query(Place.id,Place.name,Place.code,Place.users).filter(Place.id == 2).first()
2020-05-26 12:45:33,681 INFO sqlalchemy.engine.base.Engine SELECT places.id AS places_id, places.name AS places_name, places.code AS places_code, places.id = users.place_id AS users
FROM places, users
WHERE places.id = %(id_1)s
LIMIT %(param_1)s
2020-05-26 12:45:33,681 INFO sqlalchemy.engine.base.Engine {'id_1': 2, 'param_1': 1}
>>> place
(2, 'Navvy', 'N001', False)
>>> user=session.query(User.id,User.name,User.place_id).filter(User.id == 2).first()
2020-05-26 12:46:44,025 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name, users.place_id AS users_place_id
FROM users
WHERE users.id = %(id_1)s
LIMIT %(param_1)s
2020-05-26 12:46:44,025 INFO sqlalchemy.engine.base.Engine {'id_1': 2, 'param_1': 1}
>>> user
(2, 'Edries', None)
Я пробовал два способа, которые не работают:
>>> place.users.append(user)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bool' object has no attribute 'append'
>>> user.place_id==place.id
False
Как добавить существующего пользователя в существующее место?
Как сделать init
пользователей, которые не должны хранить как False (Boolean) в классе места?