flask 中的 db.relationship()

上文提到的方法,也可以找到狗的主人,但是,方便吗?,如果一个人有多只狗呢?

承接上文,修改main.py中的代码如下:

#encoding:utf-8

from flask_sqlalchemy import SQLAlchemy

from flask import Flask

 

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:005@127.0.0.1:3306/data'

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True

app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False

app.config['JSON_AS_ASCII']=False

db = SQLAlchemy(app)

db = SQLAlchemy(use_native_unicode='utf8')

class User(db.Model):

    __tablename__='users'

    id=db.Column(db.Integer,primary_key=True,autoincrement=True)

    name=db.Column(db.String(20),nullable=False)

    dogs=db.relationship('Dog',backref='master')

class Dog(db.Model):

    __tablename__='dogs'

    id=db.Column(db.Integer,primary_key=True,autoincrement=True)

    name=db.Column(db.String(20),nullable=False)

    master_id=db.Column(db.Integer,db.ForeignKey('users.id'))

@app.route('/')

def index():

    db.create_all()

    return '欢迎登录'

@app.route('/adduser/')

def addusers():

    user1=User(name='huhai')

    user2=User(name='lanyue')

    db.session.add(user1)

    db.session.add(user2)

    db.session.commit()

    return '添加成功!'

@app.route('/adddogs/')

def adddogs():

    dog1=Dog(name='gou1',master_id=1)

    dog2=Dog(name='gou2',master_id=2)

    dog3=Dog(name='gou3',master_id=1)

    dog4=Dog(name='gou4',master_id=2)

    db.session.add(dog1)

    db.session.add(dog2)

    db.session.add(dog3)

    db.session.add(dog4)

    db.session.commit()

    return '添加成功!'

@app.route('/find_master/<int:dog_id>/')

def find_master(dog_id):

    dog=Dog.query.filter(Dog.id==dog_id).first()

    return dog.master.name

@app.route('/find_dogs/<int:user_id>/')

def find_dogs(user_id):

    user=User.query.filter(User.id==user_id).first()

    alldogs=''

    for dog_temp in user.dogs:

        alldogs=alldogs+dog_temp.name + '  '

    return alldogs

if __name__=='__main__':

    app.run(debug=True)

关键点详解:

1.怎么理解 dogs=db.relationship('Dog',backref='master')

(1).添加到User模型中的dogs属性代表这个关系的面向对象视角。对于一个User类的实例,其dogs属性将返回与角色相关联的用户组成的列表。

(2).db.Relationship()第一个参数表明这个关系的另一端是哪个模型(类)。如果模型类尚未定义,可使用字符串形式指定。

(3).db.Relationship()第二个参数backref,将User向类中添加一个master属性,从而定义反向关系。这一属性可替代role_id访问User模型,此时获取的是模型对象,而不是外键的值。

2.上面的关系为一对多关系的表示,一对一怎么办?

调用db.Relationship()时需要把userlist参数设置为False。如下:

db.Relationship('Dog',backref='master',uselist=False)

3.打开浏览器,

输入 127.0.0.1:5000/

回车

输入 127.0.0.1:5000/adduser/

回车

输入 127.0.0.1:5000/adddogs/

回车

输入 127.0.0.1:5000/find_dogs/1/

回车:

如果出现以下页面,则表示执行成功!

Flask 入门(十)的更多相关文章

  1. Android入门(十二)SQLite事务、升级数据库

    原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...

  2. Flask入门笔记(一)

    一.程序的基本结构 1.1 最简单的Flask程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #coding=utf-8 # 初始化 from flask import Fla ...

  3. Flask入门HelloWorld

    Flask入门HelloWorld Flask官网:http://flask.pocoo.org/ Flask中文翻译:http://dormousehole.readthedocs.io/en/la ...

  4. Flask入门之结构重组(瘦身)-第13讲笔记

    1. pip list Flask 0.10.1 Flask-Bootstrap 3.3.5.6 Flask-SQLAlchemy 2 Flask-Script 2.0.5 Flask-WTF 0.1 ...

  5. Flask入门之Bootstrap介绍使用和Flask-Nav快速导航栏

    一.Bootstrap Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Python中,同样可以使用Bootstrap. 1. 导入Bootstrap库 from flask_b ...

  6. Flask入门之Pycharm写Hello Word

    在这里记录整理Flask入门的笔记! 今天讲讲使用Pycharm写一个Hello World 前提是已经安装好Pycharm,安装过程很简单,这里不赘述. 只放两个可以提供注册码的网站: Intell ...

  7. Flask入门和快速上手

    目录 Flask入门和快速上手 python三大主流框架对比 Flask安装 依赖 可选依赖 创建flask项目 flask最小应用--hello word 非法导入名称 调试模式 路由 唯一的 UR ...

  8. Flask 入门一( flask 框架和 flask-script 库)

    Flask 入门一( flask 框架 和 flask-script 库) 一.Flask框架: 1.简介 Flask是一个非常小的Python Web框架,被称为微型框架:只提供了一个稳健的核心,其 ...

  9. C#基础入门 十

    C#基础入门 十 Windows应用程序的界面设计 Form.cs:窗体文件,一般用于存放程序员为窗体编写的代码: Form.Designer.cs:窗体设计文件,其中的代码是由VS自动生成的,一般不 ...

  10. Flask入门 flask结构 url_for 重定向(一)

    Flask入门(一) 1 安装虚拟环境Mac,linux sudo pip install virtualenv ​ ubuntu系统 sudo apt-get install python-virt ...

随机推荐

  1. POI小demo

    使用poi需要先下载相关jar包(http://download.csdn.net/detail/wangkunisok/9454545) poi-3.14-20160307.jar poi-ooxm ...

  2. GO语言web框架Gin之完全指南(一)

    作为一款企业级生产力的web框架,gin的优势是显而易见的,高性能,轻量级,易用的api,以及众多的使用者,都为这个框架注入了可靠的因素.截止目前为止,github上面已经有了 35,994 star ...

  3. Ruby中的Hash(哈希),你可以理解为字典

    原文链接 以下代码在Ruby 2.5.1中编译通过 定义 myHash = Hash.new myHash1 = Hash["key1" => 100, "key2 ...

  4. 【简说Python WEB】Web应用部署

    目录 [简说Python WEB]Web应用部署 应用层 缓存层 数据层 Gunicorn 的应用 1.安装Gunicorn 2.Gunicorn的启动 Nginx 的应用 1.docker方式部署安 ...

  5. Jmeter之JSON提取器应用

    在接口测试中有一个这样的场景:登录之后,需要进行昵称修改,怎么实现? 首先我们分别看下登录.昵称修改的接口说明: 以上业务中补充一点,昵称修改,还需要添加请求头Authorization传登录获取的t ...

  6. PyCharm导入selenium的webdirver模块出错

    selenium安装好后准备验证一下,导入的webdriver有红色标识,检查了浏览器驱动的.环境变量仍然没有解决问题. 后来在百度找到了原因:项目没安装selenium Interpreter 打开 ...

  7. MySQL----SQL操作

    1.什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则.每一种数据库操作的方式存在不一样的地方,称为“方言”. 2.SQL通用 ...

  8. Contest 157

    2019-10-06 12:15:28 总体感受:总体难度一般,dfs和dp题花了点时间,最后一题dp有思路,但是实现上不够好. 注意点:首先是hard问题的覆盖度依然是很大的问题,其次是要注意审题. ...

  9. Building Applications with Force.com and VisualForce(Dev401)( 八):Designing Applications for Multiple users:Managing your users' experience II

    Dev 401-008: Design Applications for Multiple Users' Experience Part 2Universal Containers Scenario1 ...

  10. Jmeter接口测试之案例实战(十一)

    在前面的知识体系中详细的介绍了Jmeter测试工具在接口自动化测试中的基础知识,那么今天更新的文章主要是对昨晚的上课内容做个总结. 首先来看Jmeter测试工具在图片上传中的案例应用.首先结合互联网产 ...