Inserting new records with one-to-many relationship in sqlalchemy

后端 未结 2 453
半阙折子戏
半阙折子戏 2021-01-30 01:47

I\'m following the flask-sqlalchemy tutorial on declaring models regarding one-to-many relationship. The example code is as follows:

class Person(db.Model):
             


        
相关标签:
2条回答
  • 2021-01-30 02:09

    You dont need to write a constructor, you can either treat the addresses property on a Person instance as a list:

    a = Address(email='foo@bar.com')
    p = Person(name='foo')
    p.addresses.append(a)
    

    Or you can pass a list of addresses to the Person constructor

    a = Address(email='foo@bar.com')
    p = Person(name='foo', addresses=[a])
    

    In either case you can then access the addresses on your Person instance like so:

    db.session.add(p)
    db.session.add(a)
    db.session.commit()
    print p.addresses.count() # 1
    print p.addresses[0] # <Address object at 0x10c098ed0>
    print p.addresses.filter_by(email='foo@bar.com').count() # 1
    
    0 讨论(0)
  • 2021-01-30 02:28

    The most important thing while looking into this model is to understand the fact that this model has a one to many relationship, i.e. one Person has more than one address and we will store those addresses in a list in our case.

    So, the Person class with its init will look something like this.

    class Person(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(50))
        addresses = db.relationship('Address', backref='person',
                                lazy='dynamic')
    
        def __init__(self,id,name,addresses = []):
            self.id = id
            self.name = name
            self.addresses = addresses
    

    So this Person class will be expecting an id, a name and a list that contains objects of type Address. I have kept that the default value to be an empty list.

    Hope it helps. :)

    0 讨论(0)
提交回复
热议问题