flask内容之数据库的管理
#! /usr/bin/env python
# *-* coding: utf-8 *-* from flask import Flask, flash, redirect
from flask import url_for
from flask import request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import InputRequired
from flask import render_template
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 配置数据库连接地址
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:qw123666@localhost/test?charset=utf8"
# 是否追踪数据库的修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config["SQLALCHEMY_ECHO"] = False
app.secret_key = "" # 初始化 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)
book = db.relationship('Book', backref='author') # def __repr__(self):
# return 'Author:%s' % self.name # 定义模型类-书名
class Book(db.Model):
__tablename__ = 'books'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32))
author_id = db.Column(db.Integer, db.ForeignKey(Author.id)) # def __str__(self):
# return 'Book:%s,%s' % (self.info, self.lead) class AddBookForm(FlaskForm):
author = StringField("作者", validators=[InputRequired("请输入作者名")])
book = StringField("书名", validators=[InputRequired("请输入书名")])
submit = SubmitField("添加") @app.route("/index", methods=["get", "post"])
def index():
# 获取所有的作者
bookform = AddBookForm()
if request.method == "POST":
# 取值
if bookform.is_submitted():
author_name = bookform.author.data
book_name = bookform.book.data
# 查指定作者的名字是否存在
author = Author.query.filter(Author.name == author_name).first()
if not author:
try:
# 增加作者
author_obj = Author(name=author_name)
db.session.add(author_obj)
db.session.commit()
# 增加书名
book_obj = Book(name=book_name, author_id=author_obj.id)
db.session.add(book_obj)
db.session.commit()
except Exception as e:
db.session.rollback()
flash("添加失败")
else:
try:
book_obj = Book(name=book_name, author_id=author.id)
db.session.add(book_obj)
db.session.commit()
except Exception as e:
db.session.rollback()
flash("添加失败")
# 往数据开中写入值
authors = Author.query.all()
return render_template("index.html", authors=authors, form=bookform) authors = Author.query.all()
return render_template("index.html", authors=authors, form=bookform) @app.route("/delete_author/<author_id>")
def delete_author(author_id):
author_obj = Author.query.get(author_id)
if author_obj:
try:
Book.query.filter(Book.author_id == author_id).delete()
db.session.delete(author_obj)
db.session.commit()
except Exception as e:
print("删除作者名失败")
db.session.rollback()
else:
flash("没有这个作者")
authors = Author.query.all()
bookform = AddBookForm() return redirect(url_for('index')) @app.route("/delete_book/<book_id>")
def delete_book(book_id):
try:
# 书的对象
book_obj = Book.query.get(book_id)
print(book_obj)
# 书的作者的id
author_id = book_obj.author.id
# author_id = book_obj.Author.id
print(author_id)
if book_obj:
db.session.delete(book_obj)
author_count = len(book_obj.author.book)
if author_count == 0:
# author_obj = Author.query.get(author_id)
author_objs = Author.query.filter(Author.id == author_id).all()
print("author_obj", author_objs)
for author_obj in author_objs:
db.session.delete(author_obj) except Exception as e:
print("没有这本书")
db.session.commit() authors = Author.query.all()
bookform = AddBookForm()
return render_template("index.html", authors=authors, form=bookform) if __name__ == '__main__':
app.run(debug=True)
图书管理系统(数据库基本的操作)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="http://127.0.0.1:5000/index">
{{ form.csrf_token() }}<br/>
{{ form.author.label }}{{ form.author }}<br/>
{{ form.book.label }}{{ form.book }}<br/>
{{ form.submit }}<br/>
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
</form>
<br/>
<h1>图书管理界面</h1>
<ul>
{% for author in authors %}
<li> {{ author.name }}<a href="/delete_author/{{ author.id }}">删除作者</a></li>
<ul>
{% for book in author.book %}
<li> {{ book.name }}<a href="/delete_book/{{ book.id }}">删除书名</a></li>
{% endfor %}
</ul>
{% endfor %}
</ul> </body>
</html>
前端展示代码
flask内容之数据库的管理的更多相关文章
- Flask系列:数据库
这个系列是学习<Flask Web开发:基于Python的Web应用开发实战>的部分笔记 对于用户提交的信息,包括 账号.文章 等,需要能够将这些数据保存下来 持久存储的三种方法: 文件: ...
- Flask 操作Mysql数据库 - flask-sqlalchemy扩展
数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的.它使用结构化的查询语言.关系型数据库的列定义了表中 ...
- Winform开发框架中的内容及文档管理模块功能介绍
在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...
- flask内容
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- c#上传文件并将word pdf转化成txt存储并将内容写入数据库
c#上传文件并将word pdf转化成txt存储并将内容写入数据库 using System; using System.Data; using System.Configuration; using ...
- DB2 9.5 数据库分区管理及应用实践
DB2 数据库分区是 DB2 企业版 DPF(Data Partitioning Feature)选件提供的,它主要用来为大规模数据处理.高并发数据访问提供支持.DB2 数据库分区采用 Share-n ...
- 数据库智能管理助手-CloudDBA
摘要:阿里云CloudDBA主要分为离线分析和在线分析两种功能.帮助用户节省成本,定位问题,分析原因并推荐解决方法.CloudDBA可以做到实时诊断,离线诊断和SQL优化.并且通过MySQL的参数调优 ...
- Database基础(一):构建MySQL服务器、 数据库基本管理 、MySQL 数据类型、表结构的调整
一.构建MySQL服务器 目标: 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...
- Flask学习之四 数据库
英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database 中文翻译地址:http://ww ...
随机推荐
- GO语言之urfave/cli命令行解析
练习URL: https://blog.csdn.net/sd653159/article/details/83381786 相信只要部署过线上服务,都知道启动参数一定是必不可少的,当你在不同的网络. ...
- spring+redis的集成,redis做缓存
1.前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.我们都知道,在日常的应用中,数据库瓶颈是最容易出现的 ...
- 安装和强行卸载fuse
先卸载 yum list fuse yum --setopt=tsflags=noscripts remove fuse.x86_64 安装 yum install automake gcc-c++ ...
- ionic 3 build后图片无法显示
运行命令 ionic cordova build android 生成了android-debug.apk. /home/han/project/zero_app/platforms/android/ ...
- Linux 的文件类型
Linux 的文件通常分为 7 大类 文件类型 缩写 英文名称 ...
- A - Exposition CodeForces - 6E
题目链接:https://vjudge.net/contest/202699#problem/A 题意 给一个n个元素的序列,从中挑出最长的子序列,要求子序列中元素差的最大值不超过k.问有几个最长子序 ...
- ionic2程序调试
新手一枚,之前一直做.net开发,最近接触Ionic2,也没有人带,只能自己一点点抠文档,查资料.一直苦于无法直接调试打包发不好的app,只能在代码里面加上alert一点一点的抛出要看信息,感觉就像瞎 ...
- linux下在root用户登陆状态下,以指定用户运行脚本程序实现方式
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMcAAABKCAIAAACASdeXAAAEoUlEQVR4nO2dy7WlIBBFTYIoSIIkmD ...
- php json_encode转换中文乱码
$arr = ["a"=>'范德萨似懂非懂']; echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- springmvc+ajax——第三讲(post请求)
在ajax01.html中增加个input标签: 在ajax的js中增加: 在controller中仍然使用getParamter():