python第三篇:python、flask關系映射


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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM