博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flask框架中,利用数据库增删查改
阅读量:5153 次
发布时间:2019-06-13

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

 

# 配置数据库

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:mysql@127.0.0.1:3306/booktest"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class AddBookForm(FlaskForm):
"""自定义添加书籍的表单"""
author = StringField('作者:', validators=[InputRequired('请输入作者')])
book = StringField('书名:', validators=[InputRequired('请输入书名')])
submit = SubmitField('添加')

class Author(db.Model):
"""作者模型:一的一方"""
__tablename__ = "authors"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)

# 定义属性,以便作者模型可以直接通过该属性访问其多的一方的数据(书的数据)

# backref 给 Book 也添加了一个 author 的属性,可以通过 book.author 获取 book 所对应的作者信息
books = db.relationship('Book', backref='author')

class Book(db.Model):
"""书的模型:多的一方"""
__tablename__ = "books"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
# 记录一的一方的id作为外键
author_id = db.Column(db.Integer, db.ForeignKey(Author.id))

@app.route('/delete_author/<author_id>')
def delete_author(author_id):
"""删除作者以及作者所有的书籍"""

try:

author = Author.query.get(author_id)
except Exception as e:
print(e)
return "查询错误"

if not author:

return "作者不存在"

# 删除作者及其所有书籍

try:

# 先删除书籍
Book.query.filter(Book.author_id == author_id).delete()
# 再删除指定作者
db.session.delete(author)
db.session.commit()
except Exception as e:
print(e)
db.session.rollback()
return "删除失败"

return redirect(url_for('index'))

@app.route('/delete_book/<book_id>')
def delete_book(book_id):
"""删除书籍"""
try:
book = Book.query.get(book_id)
except Exception as e:
print(e)
return "查询错误"

if not book:

return "书籍不存在"

try:

db.session.delete(book)
db.session.commit()
except Exception as e:
print(e)
db.session.rollback()
return '删除失败'

return redirect(url_for('index'))

@app.route('/', methods=['get', 'post'])
def index():
"""返回首页"""

book_form = AddBookForm()

# 如果book_form可以被提交

if book_form.validate_on_submit():
# 1. 取出表单中数据
author_name = book_form.author.data
book_name = book_form.book.data

# 2. 做具体业务逻辑代码实现

# 2.1 查询指定名字的作者
author = Author.query.filter(Author.name == author_name).first()
# if 指定名字的作者不存在:
if not author:
try:
# 添加作者信息到数据库
# 初始化作者的模型对象
author = Author(name=author_name)
db.session.add(author)
db.session.commit()

# 添加书籍信息到数据库(指定其作者)

book = Book(name=book_name, author_id=author.id)
db.session.add(book)
db.session.commit()
except Exception as e:
db.session.rollback()
print(e)
flash("添加失败")
else:
book = Book.query.filter(Book.name == book_name).first()

if not book:

try:
# 添加书籍信息到数据库(指定其作者)
book = Book(name=book_name, author_id=author.id)
db.session.add(book)
db.session.commit()
except Exception as e:
print(e)
flash("添加失败")
else:
flash("已存在")

else:

if request.method == "POST":
flash('参数错误')

# 1. 查询数据

authors = Author.query.all()
# 2. 将数据传入到模板中进行渲染返回
return render_template('demo1_bookDemo.html', authors=authors, form=book_form)

转载于:https://www.cnblogs.com/dreamer-zhang/p/10458088.html

你可能感兴趣的文章
谷歌书签
查看>>
unix&linux大学教程学习 第七章
查看>>
hbase_1
查看>>
JVM调优日志解析分析
查看>>
windows 内部预览版与迅雷极速版不配合
查看>>
servelt笔记一
查看>>
global的使用
查看>>
[No000004]在WIN7/8任务栏创建快捷方式
查看>>
[No0000F9]C# 运算符重载
查看>>
如何设置IntelliJ IDEA智能感知支持Jsp内置对象
查看>>
CUBRID学习笔记 46 PREPARED set Do
查看>>
HDU——2647Reward(DFS或差分约束)
查看>>
Ubuntu 通过apt安装VSCode
查看>>
MySQL常用数据类型
查看>>
Python中的运算符
查看>>
2014-07-24 .NET实现微信公众号的消息回复与自定义菜单
查看>>
Java架构师成长之道之计算机组成原理组成篇
查看>>
MySql实现远程连接
查看>>
Ubuntu安装配置JDK
查看>>
使用checked关键字处理“溢出”错误
查看>>