4.3自定義模型類html
模型表示程序使用的數據實體,在Flask-SQLAlchemy中,模型通常是Python類,繼承自db.Model,db是SQLAlchemy類的實例,表明程序使用的數據庫。mysql
類中的屬性對應數據庫表中的列。id爲主鍵,是由Flask-SQLAlchemy管理。db.Column類構造函數的第一個參數是數據庫列和模型屬性類型。sql
#coding=utf-8 from flask import Flask,render_template,redirect,url_for from flask_sqlalchemy import SQLAlchemy app = 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)
#coding=utf-8 from flask import Flask,render_template,url_for,redirect,request from flask_sqlalchemy import SQLAlchemy from flask_wtf import FlaskForm from wtforms.validators import DataRequired from wtforms import StringField,SubmitField app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@localhost/test1' app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True app.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<id>') 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<id>') 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)
<h1>玄幻系列</h1> <form method="post"> {{ form.csrf_token }} <p>做者:{{ form.au_info }}</p> <p>書名:{{ form.bk_info }}</p> <p>{{ form.submit }}</p> </form> <ul> <li>{% for x in author %}</li> <li>{{ x }}</li><a href='/delete_author{{ x.id }}'>刪除</a> <li>{% endfor %}</li> </ul> <hr> <ul> <li>{% for x in book %}</li> <li>{{ x }}</li><a href='/delete_book{{ x.id }}'>刪除</a> <li>{% endfor %}</li> </ul>