外键约束
[TOC]
创建外键约束表结构
有两个表,用户表(users)与文章表(article)。其中文章表中的作者id是来自用户表的id,即外键关系
- 用户表:
# mysql
create table users(
id int primary key autoincrement,
username varchar(100) not null
)
# python模型映射
class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(100), nullable=False)
- 文章表
# mysql
create table article (
id int primary key autoincrement,
title varchar(100) not null,
content text not null,
author_id int,
foreign key 'author_id' references 'users.id'
)
# python模型映射
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
author_id = db.Column(db.Integer, db.ForeignKey('users.id')) # 设置外键约束
查找文章作者
方法一:
# 首先查找文章标题为"aaa"的文章对象,该对象里面有作者id
article = Article.query.filter(Article.title == 'aaa').first()
# 然后根据作者id,由外键关系获取到用户的名字--作者名字
author_id = article.author_id
user = Users.query.filter(Users.id == author_id).first()
# 打印出作者名字
print('username:%s' % user.username)
方法二:
-
修改python模型映射方法
class Article(db.Model): __tablename__ = 'article' id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) author = db.relationship('Users', backref=db.backref('articles')) # 反向引用的方法
-
查找文章作者
article = Article.query.filter(Article.title == 'aaa').first() print('username:%s' % article.author)
列出某作者所有文章
文章类需要有反向引用的方法 即author = db.relationship('Users', backref=db.backref('articles'))
user = Users.query.filter(Users.username=='Jyang').first() # 获取作者
result = user.articles # 获取作者写过的所有文章
for article in result:
print(article.title) # 打印作者的所有文章的标题
网友评论