博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask之自定义模型类
阅读量:5251 次
发布时间:2019-06-14

本文共 4385 字,大约阅读时间需要 14 分钟。

4.3自定义模型类

定义模型

模型表示程序使用的数据实体,在Flask-SQLAlchemy中,模型一般是Python类,继承自db.Model,db是SQLAlchemy类的实例,代表程序使用的数据库。

类中的属性对应数据库表中的列。id为主键,是由Flask-SQLAlchemy管理。db.Column类构造函数的第一个参数是数据库列和模型属性类型。

如下示例:定义了两个模型类,作者和书名。

#coding=utf-8from flask import Flask,render_template,redirect,url_forfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)#设置连接数据app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test1'#设置每次请求结束后会自动提交数据库中的改动app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True#设置成 True,SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True#实例化SQLAlchemy对象db = SQLAlchemy(app)#定义模型类-作者class Author(db.Model):    __tablename__ = 'author'    id = db.Column(db.Integer,primary_key=True)    name = db.Column(db.String(32),unique=True)    email = db.Column(db.String(64))    au_book = db.relationship('Book',backref='author')    def __str__(self):        return 'Author:%s' %self.name#定义模型类-书名class Book(db.Model):    __tablename__ = 'books'    id = db.Column(db.Integer,primary_key=True)    info = db.Column(db.String(32),unique=True)    leader = db.Column(db.String(32))    au_book = db.Column(db.Integer,db.ForeignKey('author.id'))    def __str__(self):        return 'Book:%s,%s'%(self.info,self.lead)

创建表 db.create_all()

查看author表结构 desc author

查看books表结构 desc books

#coding=utf-8from flask import Flask,render_template,url_for,redirect,requestfrom flask_sqlalchemy import SQLAlchemyfrom flask_wtf import FlaskFormfrom wtforms.validators import DataRequiredfrom wtforms import StringField,SubmitFieldapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@localhost/test1'app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = Trueapp.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Trueapp.config['SECRET_KEY']='s'db = SQLAlchemy(app)#创建表单类,用来添加信息class Append(Form):    au_info = StringField(validators=[DataRequired()])    bk_info = StringField(validators=[DataRequired()])    submit = SubmitField(u'添加')@app.route('/',methods=['GET','POST'])def index():    #查询所有作者和书名信息    author = Author.query.all()    book = Book.query.all()    #创建表单对象    form = Append()    if form.validate_on_submit():        #获取表单输入数据        wtf_au = form.au_info.data        wtf_bk = form.bk_info.data        #把表单数据存入模型类        db_au = Author(name=wtf_au)        db_bk = Book(info=wtf_bk)        #提交会话        db.session.add_all([db_au,db_bk])        db.session.commit()        #添加数据后,再次查询所有作者和书名信息        author = Author.query.all()        book = Book.query.all()        return render_template('index.html',author=author,book=book,form=form)    else:        if request.method=='GET':            render_template('index.html', author=author, book=book,form=form)    return render_template('index.html',author=author,book=book,form=form)#删除作者@app.route('/delete_author
')def delete_author(id): #精确查询需要删除的作者id au = Author.query.filter_by(id=id).first() db.session.delete(au) #直接重定向到index视图函数 return redirect(url_for('index'))#删除书名@app.route('/delete_book
')def delete_book(id): #精确查询需要删除的书名id bk = Book.query.filter_by(id=id).first() db.session.delete(bk) #直接重定向到index视图函数 return redirect(url_for('index'))if __name__ == '__main__': db.drop_all() db.create_all() #生成数据 au_xi = Author(name='我吃西红柿',email='xihongshi@163.com') au_qian = Author(name='萧潜',email='xiaoqian@126.com') au_san = Author(name='唐家三少',email='sanshao@163.com') bk_xi = Book(info='吞噬星空',lead='罗峰') bk_xi2 = Book(info='寸芒',lead='李杨') bk_qian = Book(info='飘渺之旅',lead='李强') bk_san = Book(info='冰火魔厨',lead='融念冰') #把数据提交给用户会话 db.session.add_all([au_xi,au_qian,au_san,bk_xi,bk_xi2,bk_qian,bk_san]) #提交会话 db.session.commit() app.run(debug=True)

生成数据后,查看数据:

模板页面示例:

玄幻系列

{
{ form.csrf_token }}

作者:{

{ form.au_info }}

书名:{

{ form.bk_info }}

{

{ form.submit }}

  • {% for x in author %}
  • {
    { x }}
  • 删除
  • {% endfor %}

  • {% for x in book %}
  • {
    { x }}
  • 删除
  • {% endfor %}

 

添加数据后,查看数据:

 

转载于:https://www.cnblogs.com/alexzhang92/p/9552708.html

你可能感兴趣的文章
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
java 常用命令
查看>>
CodeForces Round #545 Div.2
查看>>
卷积中的参数
查看>>