python中關系映射主要包括三種:一對多關系映射、一對一關系映射、多對多關系映射。
一對多關系映射 一方:Student(學生) 添加關聯屬性和反向引用 多方:Article(文章) 添加外鍵關聯 一對一關系映射 一方:Student(學生)主表 添加多對多的關聯屬性和反向引用,同時uselist取值為FALSE,表示fetchone 添加第三張表的關聯屬性和反向引用關系 一方:Detail(詳情表)次表 添加外鍵關聯 多對多關系映射 多方:Users 添加多對多的關聯屬性和反向引用,同時指明第三張關聯表(2) 添加對第三張表的關聯屬性和反向引用(2) 多方:Goods 添加對第三張表的關聯屬性和反向引用(2) 第三張關聯表:UsersGoods
一對多關系映射
# 一方 class Student(db.Model): __tablename__ = "student" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), nullable=False) # 增加關聯屬性和反向引用關系 # 關聯屬性:在student對象中通過哪個屬性能夠得到對應的所有的article對象 # 反向引用:在article對象中通過哪個屬性能夠得到它對應的student articles = db.relationship('Article', backref="student", lazy="dynamic") def __init__(self, name): self.name = name def __repr__(self): return "<Student:%r>" % self.name # 多方 class Article(db.Model): __tablename__ = "article" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), nullable=False) # 增加一個列(外鍵):引用自article表的主鍵,這一段代碼是為了生成數據庫關聯。 student_id = db.Column(db.Integer, db.ForeignKey('student.id')) # 這里的student是數據庫表名 def __init__(self, name): self.name = name def __repr__(self): return "<Article:%r>" % self.tname
一對一關系映射
# 一方 class Student(db.Model): __tablename__ = "student" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), nullable=False) # 增加關聯屬性和反向引用關系 # 關聯屬性:在student對象中通過哪個屬性能夠得到detail信息 # 反向引用:在detail對象中通過哪個屬性能夠得到它對應的student # uselist is for the purpose of fetchone user = db.relationship('Detail', backref='student', uselist=False) def __init__(self, name): self.name = name def __repr__(self): return "<Student:%r>" % self.name class Detail(db.Model): __tablename__ = 'detial' id = db.Column(db.Integer, primary_key=True) weight = db.Column(db.Float) student_id = db.Column(db.Integer, db.ForeignKey('student.id'))
多對多關系映射
class Users(db.Model): __tablename__ = 'users' id = db.Column(db.Integer,primary_key=True) username = db.Column(db.String(80),nullable=False,unique=True) age = db.Column(db.Integer) email = db.Column(db.String(120),unique=True) isActive = db.Column(db.Boolean,default=True) # 添加多(Users)對多(Goods)的關聯屬性和反向引用關系 # 涉及到第三張關聯表 - users_goods goods=db.relationship( 'Goods', secondary='users_goods', lazy="dynamic", backref=db.backref( "users", lazy='dynamic') ) #增加對UsersGoods的關聯屬性和反向引用關系:目的是為了創建Users類 與 UsersGoods類 之間的關系 userGoods = db.relationship('UsersGoods',backref="user",lazy="dynamic") class Goods(db.Model): __tablename__ = "goods" id = db.Column(db.Integer,primary_key=True) gname = db.Column(db.String(80)) gprice = db.Column(db.Float) #增加對UsersGoods類的關聯屬性和反向引用關系 goodUsers = db.relationship('UsersGoods',backref="good",lazy="dynamic") # 創建 users_goods 的第三張關聯表,從而來表示多對多的關系 class UsersGoods(db.Model): __tablename__ = "users_goods" id = db.Column(db.Integer,primary_key=True) users_id = db.Column(db.Integer,db.ForeignKey('users.id')) goods_id = db.Column(db.Integer,db.ForeignKey('goods.id')) count = db.Column(db.Integer,default=1) # user.goods # user.userGoods # good.users # good.goodUsers # goodUsers.good # userGoods.user
