一、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(