美文网首页
python-Flask_SQLAlchemy(3)

python-Flask_SQLAlchemy(3)

作者: SmallPot_Yang | 来源:发表于2018-03-31 13:36 被阅读0次

外键约束

[TOC]

创建外键约束表结构

有两个表,用户表(users)与文章表(article)。其中文章表中的作者id是来自用户表的id,即外键关系

  1. 用户表:
# 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)
  1. 文章表
 # 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)

方法二:

  1. 修改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')) # 反向引用的方法
    
    
  2. 查找文章作者

    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) # 打印作者的所有文章的标题

相关文章

  • python-Flask_SQLAlchemy(3)

    外键约束 [TOC] 创建外键约束表结构 有两个表,用户表(users)与文章表(article)。其中文章表中的...

  • python-Flask_SQLAlchemy(2)

    SQLAlchemy模型与表映射 [TOC] 模型与表映射 模型需要继承自db.Model,映射到表中的属性需写成...

  • python-Flask_SQLAlchemy(5)

    模型分文件 [TOC] 分开models的目的 方便代码管理 解决循环引用 例子 主文件:main.py 模型文件...

  • python-Flask_SQLAlchemy(1)

    数据库SQLAlchemy [TOC] SQLAlchemy介绍 flask_sqlalchemy是一套ORM框架...

  • python-Flask_SQLAlchemy(4)

    数据表多对多关系 [TOC] 多对多关系 多对多关系,需要通过一个中间表进行关联 中间表使用db.Table的方式...

  • 恶意文件夹

    【%你的iapp在这里哦/恭喜你找到了/3/3/3/3/3/3/3/3/3/3/3/3/3/3/3/3/3/3/3...

  • 3+3+3

    九年了,不曾去过,马路那边的刘家村。唱戏,小路~抓蝌蚪,洗衣服,捞水草,漩涡~种满菜的田地,养着奶牛的茅草屋,充满...

  • 3/3

    郭一博 刘佐千 李文浩 王天聪 柳絮 刘全利 李明东

  • 3/3

  • if(a==3) or if(3==a)

    记得刚写程序那会儿,遇到 if else 的条件判断逻辑,基本都会这样写:if(a==3) 为什么呢? 因为自然...

网友评论

      本文标题:python-Flask_SQLAlchemy(3)

      本文链接:https://www.haomeiwen.com/subject/urpgcftx.html