重新捡起flask(七)

来到数据库一章了,进度很销魂的慢,中间其实还是忍不住玩了一下勇敢的心,整体画风十分强悍,本来录了视频的,没想到最后没保存下来,坑死了...

来到数据库一章,我的心还是很蒙的。

虽说自己之前sql写的666,但是你让我建模我还真没干过啊!

然后狗书里用的还是sqlalchemy,用面向对象来理解数据库,我选择godie,我知道为什么叫狗书了...
开玩笑啦。

不过说实话,是有些懵。

因为你在这个框架里呆的时间还很短,什么都不知道,你不知道这个框架为你做了什么,你就像一个瞎子一样,只能靠着狗书的引导。

但狗书毕竟是面向所有人,肯定有你不知道的问题。

而且坑爹的是,狗书既然把参数配置成false了...大家可以看一下5a...

现在在命令行测试数据库操作,竟然都没报错,只是sqlalchemy好心的给我提示了一大堆告警,我勇敢的选择了忽视.....

其实最难理解的还是下面这一段代码,定义的两张表的关系,和后面导致的数据库操作的一些命令的改变。

我还是贴一下出来,后续我们还是先分析一下2张表的关系吧。

class Role(db.Model):
    __tablename__ = "roles"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    users = db.relationship("User", backref="role")

    def __repr__(self):
        return "<Role %r>" % self.name

class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey("roles.id"))

    def __repr__(self):
        return "<User %r>" % self.username

users表中的每条记录都会指定一个roles表里面的id字段。

为了操作,roles表里面加了一个虚拟的属性users,他其实不是一个数据库的字段,从她的relationship方法也可以知道。他的作用是当你新建一个users表中的记录时,可以直接这么用User(username="balabala",role=some_instance_of_Role).

其实就是这样。

狗书中还说到了一对多,和什么多对多的关系。

这个也很简单理解,我们来懵一下。

user对role是多对一的关系,为什么?

因为多个user都可以对应同一个role(不看书确认了,是否打脸了?)

其实关系很简单。

然后还要收到一些点就是,sqlalchemy‘为我们自动管理的主键,会用整数自增,你看我们上面实例化user也知道,我们没有指定id的值,但不会报错。

另外,数据库操作和git一样,你要先add,再commit。

add支持多个,commit支不支持添加备注呢...add多个自然还出来了一个事务问题,这个狗书上说sqlalchemy会自动保证,还是很强悍的!

哦,还有一个很重要的是回滚,roll_back。

没用过,如果能和git一样,回滚到指定版本就强了,没试过,大家可以多去搜一下吧。

总之,数据库这一章概念较多,我们就是简单理一下。

时间: 2024-10-29 17:00:48

重新捡起flask(七)的相关文章

重新捡起flask(四)

中间一个礼拜没有看过flask了,今天重新捡起来,一切又开始陌生了.强迫自己看下去,也算是有了收获. 以前大概到这里就开始没有怎么实际写过代码了,其实看书,和实际写代码还真是差的很远. 刚看了没多久,由于自己现在是自己手敲,所以走了一些弯路,但这些弯路其实对于成长来说,还真是很有用的. 这里我举个刚刚遇到的例子. 不知道为什么博客园好像上传图片的服务出问题了 命令行还不能复制,蛋疼的很,我还是口述吧. from flask import Flask, render_template from f

flask七:一些小细节

1.在局域网中,让其他电脑访问我的网站:host参数 如果设置为0.0.0.0,则在局域网中,输入当前项目所在的ip+端口就可以访问这个项目如果host设置为固定的ip,如host=‘'192.168.1.136',则只有ip为192.168.1.136的电脑才能访问此项目 2.指定端口号:flask默认使用5000端口,port参数,可以指定此项目使用的端口 3.url唯一 如果在定义url的时候在url后面加了"/",则访问的时候,如果没有加"/",浏览器会自动

重新捡起flask(三)

记一次bug调试. 本来以为模板这一章可以很快的过掉的,刚刚写完的2其实只剩下个flask-moment时间库了,之前早就做过,记得很简单,本来说只要敲一下代码就结束,没想到,踩坑里去了. 调试bug吗,我想起了温伯格先生书里说到,永远要做点别的事,特别是对计算机,重复执行只会得到一样的结果. 现在错误我简单来描述一下,就是我在打开index主页时,报了一个这样的错. 为了解开这个错误,我做了几点尝试. 第一,我试了一下打开user页面,页面是正常的. 那说明base.html应该没什么问题.因

BAE Flask UEditor 使用七牛云

1. 配置BAE支持七牛云的SDK BAE的python requirements当然不支持竞争对手了. 解决方法: 把qiniu这个文件包直接放置在你项目的目录中(与其他app同级) 运行会发现缺少requests,这个BAE中支持,填到requirements中就可以了 2. Flask使用Ueditor 参考: http://segmentfault.com/a/1190000002429055 已经配置好,有疑问请回复 3. 上传文件到七牛云 七牛python sdk API有 put_

第七章 Flask——特殊装饰器

第七章 Flask--特殊装饰器 一.@app.template_filter() 二.@app.template_global() 三.@app.errorhandler 四.@app.errorhandler 五.@app.after_request 一.@app.template_filter() 二.@app.template_global() 三.@app.errorhandler 四.@app.errorhandler 五.@app.after_request 原文地址:https:

Flask入门 表单Flask-wtf form原生 Bootstrap渲染(七)

(1) 原生的表单 模板页面,form表单form.html <form action="{{ url_for('/check/') }}" method='post'> <p>用户名: <input type='text' name='username'></p> <p>密码: <input type='password' name='userpass'></p> <p><input

Flask最强攻略 - 跟DragonFire学Flask - 第七篇 Flask 中路由系统

Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST"]) 为什么要这么用?其中的工作原理我们知道多少? 请关注跟DragonFire学Flask 之 路由系统 ,这里有你想要的答案 1. @app.route() 装饰器中的参数 如果不明白装饰器 点击这里 methods : 当前 url 地址,允许访问的请求方式 @app.route("/inf

Flask之初学者(七)

Flask的g对象 g可以可以看作是单词global的缩写,使用"from flask import g"导入,g对象的作用是保存一些在一次请求中多个地方的都需要用到的数据,这些数据可能在用到的时候都需要去进行判断或其他处理之后才能获得,如果在第一次获取的时候就存放到g对象中,就可以避免一些不必要的操作.比如在某一个函数中定义了"g.username='Jason'"(可能为了定义这个值,会进行一些别的操作,比如数据库查询判断等,定义好了这个值后就不用再每次用到它的

flask基础之蓝图的使用(七)

前言 关于蓝图是什么?或为什么使用蓝图的详细介绍,官方文档讲的很详细,不再赘述.简单来说,在大型的应用中,我们不想视图函数显得杂乱无章,难以维护,将众多的视图函数按照Api的设计规则进行切割是一个好方法. 蓝图的简单使用 第一步:创建蓝图 # testblue.py from flask import Blueprint testblue = Blueprint('blue', __name__) @testblue.route('/index') def index(): return 'OK