Где в SQLAlchemy указано, что нельзя добавлять дубликаты дочерних элементов к родителю в отношениях один-ко-многим? - PullRequest
0 голосов
/ 28 марта 2020

В отношениях SQLAlchemy «один ко многим» кажется, что по умолчанию невозможно связать дублирующиеся дочерние элементы с родителями. Это поведение, которое каждый на самом деле хочет. Например, когда мы запускаем следующий код:

class Child(db.Model):
    __tablename__ = 'child'
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(50) )
    age = db.Column(db.Integer())
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id', ondelete='CASCADE'))

class Parent(db.Model):
    __tablename__ = 'parent'
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(50) )
    children = db.relationship("Child", backref='parent', cascade='all')

    p = Parent()
    p.name="Pop"
    c = Child()
    c.name = "Junior"
    p.children.append(c)
    p.children.append(c)
    db.session.add(p)
    db.session.commit()

К счастью, только одна дочерняя запись добавляется в базу данных!

Однако мой вопрос: где это явно задокументировано в документации по SQLAlchemy?

(Это должно быть задокументировано явно, поскольку это противоречит стандартному поведению Python - по умолчанию можно добавлять дубликаты объектов в список. Например:

class MyClass:
    x = 5

my_obj = MyClass()

myList = []

myList.append(my_obj)
myList.append(my_obj)

for x in myList:
    print(x)  # prints the object out twice

)

...