《Flask Web开发实战:入门、进阶与原理解析》 笔记代码学习和注释(第五章-数据库)

一、ORM

ORM用类来定义表,类的实例化代表了表的一整行,那么整个表就是类的实例化的LIST.

二、在表单中实现增删改查代码样例

@app.route('/new', methods=['GET', 'POST'])
def new_note():#是一个比较典范的程序
    form = NewNoteForm()
    if form.validate_on_submit():
        body = form.body.data
        note = Note(body=body)
        db.session.add(note)
        db.session.commit()
        flash('Your note is saved.')
        return redirect(url_for('index'))
    return render_template('new_note.html', form=form)


删(里面包括了用主键查表的行)
@app.route('/delete/<int:note_id>', methods=['POST'])
def delete_note(note_id):
    form = DeleteNoteForm()
    if form.validate_on_submit():
        note = Note.query.get(note_id)#通过id先找到
        db.session.delete(note)#然后直接删除掉
        db.session.commit()
        flash('Your note is deleted.')
    else:
        abort(400)
    return redirect(url_for('index'))


改(直接覆盖掉就行了)
@app.route('/edit/<int:note_id>', methods=['GET', 'POST'])
def edit_note(note_id):
    form = EditNoteForm()
    note = Note.query.get(note_id)
    if form.validate_on_submit():
        note.body = form.body.data
        db.session.commit()
        flash('Your note is updated.')
        return redirect(url_for('index'))
    form.body.data = note.body  # preset form input's value
    return render_template('edit_note.html', form=form)

note = Note.query.get(note_id)#查一行
notes = Note.query.all()#查全部

三、表关系

一对多
# one to many
class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), unique=True)
    phone = db.Column(db.String(20))
    articles = db.relationship('Article')  # collection,这是一个集合关系属性,里面包含了作者的所有文章

    def __repr__(self):
        return '<Author %r>' % self.name
#最后有两种方法来建立:
#第一种是“多”这一端,直接给外键赋值
#第二种是“一”这一端,将关系属性赋值给实际对象

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), index=True)
    body = db.Column(db.Text)
    author_id = db.Column(db.Integer, db.ForeignKey('author.id'))#用外键实现一对多的关系

    def __repr__(self):
        return '<Article %r>' % self.title

一对一
# one to one
#一对一就是一种特殊的一对多,只不过那个list里的元素变成一个了而已
class Country(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), unique=True)
    capital = db.relationship('Capital', back_populates='country', uselist=False)  # collection -> scalar

    def __repr__(self):
        return '<Country %r>' % self.name


class Capital(
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值