как добавить экземпляр во многие к одному в sqlalchemy? - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь добавить существующего пользователя из 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) в классе места?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...