在modle中创建两个模型表

class User(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
u_name = db.Column(db.String(10), unique=True)
posts = db.relationship('Dongtai',backref='user',lazy='dynamic') class Dongtai(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
body = db.Column(db.String(140),unique=True)
u_id = db.Column(db.Integer,db.ForeignKey('user.id'))

分别是用户和动态模型

之间进行了关联     注意进行关联需要外链配合使用,只有一边进行关联会出错


一对多

一般来说自己做查询操作,比如我想要知道一个用户发的动态,那么需要先查询用户信息,然后通过用户信息查询用户的动态

但是flask-sqlalchemy通过一个关联属性可以只需要查询用户即可得到所发的动态

@app.route('/xxx/')
def get_query():
# 其他属性也行 id
u = User.query.filter(u_name="查询的用户").first()
bodys = u.posts return render_template('xxxx.html',bodys=bodys) # 网页渲染
{% for body in bodys %}
{{ body.body }}<br>
{{ body.u_id }}<br>
{% endfor %}

多对一

多对一的查询由于有了反向代理

relationship('Dongtai',backref='user',lazy='dynamic')

可以通过

d = Dongtai.query.first()
print(d.user.u_name)

直接询问动态模型进行查询,通过

ralationship("Dongtai",backref='user',lazy='dynamic')

# 注意反向代理的backref 名称

通过反向关联的名称表可以得到user表中的属性




更新一下,

增加两个模型作为添加数据实验

python manage.py shell 

# 进入shell 模式 进行数据添加

导入模型和db

在已有的用户数据中提取一个id为3的

做一个用户动态的实例

这里貌似有一个坑点,不知道其他人和我相同不? 

你不能直接 p.user_id = u  用户实例   必须要使用 u.id 才能在之后的commit()中保存,不然会出现以下错误

db.session.add(p)

db.session.commit()   保存即可,在数据库中post表中存在数据

当然除了这个还有另一种,比如在 用一个用户实例  u

使用关系 进行append 添加 p1动态   p1的user_id 则设置为u实例的 id 3

在将 动态p1 加入数据库 保存

数据库中也能显示出   post表 user_id为3的动态


如果需要查看用户所拥有的post,因为在用户表中设置了关联,所以使用 以下进行查看 ,但是注意,因为关联表中设置了 lazy = 'dynamic' 懒加载

前一份u.posts 是指一个对象basequery,还可以对该对象进行一个筛选  比如我在动态表中存储了2条用户id为3的数据

通过筛选动态表中动态id为13的动态, 发现还是属于basequery的对象,还能进行下一步操作

得到一个用户动态的实例 13

如果查看该实例的body属性   根据上面的操作.body

后面一个这是直接将上一个对象进行一个数据加载  变为放在内存中的数据

all 是所有数据,所以需要进行一个循环遍历

for i in u.posts.all():
i.body

如果是first() 则不需要遍历     直接body

最新文章

  1. iOS项目开发中的知识点与问题收集整理①(Part 一)
  2. 如何在centos下部署Node环境
  3. Spring读写xml文件
  4. protobuf简介和使用
  5. vector与list区别
  6. 移动app框架inoic功能研究
  7. Windows内存小结
  8. ArrayList其实就那么一回事儿之源码浅析
  9. 黑马程序员——OC语言Foundation框架 NSArray NSSet NSDictionary\NSMutableDictionary
  10. Codeforces 622B The Time 【水题】
  11. UML类图的6中关系
  12. wind安装selenium
  13. [LeetCode]题解(python):099-Recover Binary Search Tree
  14. UVA1450-Airport
  15. 自动同步Android源代码的脚本(repo sync)
  16. D - 娜娜梦游仙境系列——村民的怪癖
  17. django drf 基础学习2
  18. ssh远程登陆看不到用户名和主机名
  19. Android studio中导入SlidingMenu问题
  20. Mysql存储引擎特性总结

热门文章

  1. [LC] 114. Flatten Binary Tree to Linked List
  2. [Machine Learning] Andrew Ng on Coursera (Week 1)
  3. Spring_IOC
  4. mysql挖掘与探索------第一章(简介)
  5. Doc: NetBeans
  6. [LC] 242. Valid Anagram
  7. markdown直接粘贴截图
  8. LeetCode Day 12
  9. 吴裕雄--天生自然KITTEN编程:行走
  10. zookeeper伪分布式集群搭建