Flask 入门(十)
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 入门(十)的更多相关文章
- Android入门(十二)SQLite事务、升级数据库
原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...
- 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 ...
- Flask入门HelloWorld
Flask入门HelloWorld Flask官网:http://flask.pocoo.org/ Flask中文翻译:http://dormousehole.readthedocs.io/en/la ...
- 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 ...
- Flask入门之Bootstrap介绍使用和Flask-Nav快速导航栏
一.Bootstrap Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Python中,同样可以使用Bootstrap. 1. 导入Bootstrap库 from flask_b ...
- Flask入门之Pycharm写Hello Word
在这里记录整理Flask入门的笔记! 今天讲讲使用Pycharm写一个Hello World 前提是已经安装好Pycharm,安装过程很简单,这里不赘述. 只放两个可以提供注册码的网站: Intell ...
- Flask入门和快速上手
目录 Flask入门和快速上手 python三大主流框架对比 Flask安装 依赖 可选依赖 创建flask项目 flask最小应用--hello word 非法导入名称 调试模式 路由 唯一的 UR ...
- Flask 入门一( flask 框架和 flask-script 库)
Flask 入门一( flask 框架 和 flask-script 库) 一.Flask框架: 1.简介 Flask是一个非常小的Python Web框架,被称为微型框架:只提供了一个稳健的核心,其 ...
- C#基础入门 十
C#基础入门 十 Windows应用程序的界面设计 Form.cs:窗体文件,一般用于存放程序员为窗体编写的代码: Form.Designer.cs:窗体设计文件,其中的代码是由VS自动生成的,一般不 ...
- Flask入门 flask结构 url_for 重定向(一)
Flask入门(一) 1 安装虚拟环境Mac,linux sudo pip install virtualenv ubuntu系统 sudo apt-get install python-virt ...
随机推荐
- element UI使用
1.Button按钮 <el-button type="text">文字按钮</el-button>设置type="text",可以是无 ...
- JAVA反射概念及使用详解(超详细)
JAVA反射概念及使用详解 一.什么是反射? 反射:框架设计的灵魂 框架:半成品软件.可以在框架的基础上进行软件开发,简化编码 反射:将类的各个组成部分封装为其他对象,这就是反射机制 好处: ...
- 《JavaScript 模式》读书笔记(2)— 基本技巧2
前一篇,简单介绍了一些js代码的基本技巧.那么这篇文章,我们继续后续的内容. 一.for循环 for循环经常用在遍历数组或者类数组对象,如引数(arguments)和HTML容器(HTMLCollti ...
- 通过xshell远程部署
Xshell 和 Xftp5 操作linux系统的机器 ------------------------------------------------------------------------ ...
- 大数据软件安装之ZooKeeper监控
一.ZooKeeper安装 官方文档: https://zookeeper.apache.org/doc/r3.5.5/zookeeperStarted.html 1.解压分发 [test@hadoo ...
- The instance of entity type 'manager' cannot be tracked because another instance with the same key value for {'id'} is already being tracked. When attaching existing entities, ensure that only one ent
最近在用ASP.NET CORE时遇到一些问题,现记录下: 出现上述错误,即在更新实体数据时出现的错误 services.AddDbContext<StoreContext>(c => ...
- Spring Controller单例与线程安全那些事儿
目录 单例(siingleton)作用域 原型(Prototype)作用域 多个HTTP请求在Spring控制器内部串行还是并行执行方法? 实现单例模式并模拟大量并发请求,验证线程安全 附录:Spri ...
- 2、Spark Core职责之初始化(1)——SparkContext
SparkContext(Spark上下文) /** * Main entry point for Spark functionality. A SparkContext represents the ...
- Android之MVC、MVP、MVVM
本文将详细阐述以下MVC.MVP.MVVM三种理念的定义 MVC MVC全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个 基本部分:模型(Model ...
- 万字综述,核心开发者全面解读PyTorch内部机制
斯坦福大学博士生与 Facebook 人工智能研究所研究工程师 Edward Z. Yang 是 PyTorch 开源项目的核心开发者之一.他在 5 月 14 日的 PyTorch 纽约聚会上做了一个 ...