#! /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内容之数据库的管理的更多相关文章

  1. Flask系列:数据库

    这个系列是学习<Flask Web开发:基于Python的Web应用开发实战>的部分笔记 对于用户提交的信息,包括 账号.文章 等,需要能够将这些数据保存下来 持久存储的三种方法: 文件: ...

  2. Flask 操作Mysql数据库 - flask-sqlalchemy扩展

    数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的.它使用结构化的查询语言.关系型数据库的列定义了表中 ...

  3. Winform开发框架中的内容及文档管理模块功能介绍

    在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...

  4. flask内容

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  5. c#上传文件并将word pdf转化成txt存储并将内容写入数据库

    c#上传文件并将word pdf转化成txt存储并将内容写入数据库 using System; using System.Data; using System.Configuration; using ...

  6. DB2 9.5 数据库分区管理及应用实践

    DB2 数据库分区是 DB2 企业版 DPF(Data Partitioning Feature)选件提供的,它主要用来为大规模数据处理.高并发数据访问提供支持.DB2 数据库分区采用 Share-n ...

  7. 数据库智能管理助手-CloudDBA

    摘要:阿里云CloudDBA主要分为离线分析和在线分析两种功能.帮助用户节省成本,定位问题,分析原因并推荐解决方法.CloudDBA可以做到实时诊断,离线诊断和SQL优化.并且通过MySQL的参数调优 ...

  8. Database基础(一):构建MySQL服务器、 数据库基本管理 、MySQL 数据类型、表结构的调整

    一.构建MySQL服务器 目标: 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...

  9. Flask学习之四 数据库

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database 中文翻译地址:http://ww ...

随机推荐

  1. Http系列笔记

    万能的HttpClient (Framework与NetCore 都支持) string url = "http://localhost:5000/api/values"; //p ...

  2. es6 Map,Set 和 WeakMap,WeakSet

    这些是新加的集合类型,提供了更加方便的获取属性值的方法,不用像以前一样用hasOwnProperty来检查某个属性是属于原型链上的呢还是当前对象的.同时,在进行属性值添加与获取时有专门的get,set ...

  3. 【技巧汇总】eclipse中如何跳转到指定行

    技巧汇总 持续更新ing eclipse中如何跳转到指定行 ctrl+L

  4. Centos安装Samba共享服务器

    安装Samba 查看Samba是否已安装 1.# rpm -qa | grep samba

  5. Redis主从实战

    为了提升redis高可用性,除了备份redis dump数据之外,还需要创建redis主从架构,可以利用从将数据库持久化,(我们所说的数据持久化将是将数据保存到写磁盘上,保证不会因为断电等因素丢失数据 ...

  6. Codeforces 844F Anti-Palindromize 最小费用流

    Anti-Palindromize 想到网络流就差不多了, 拆拆点, 建建边. #include<bits/stdc++.h> #define LL long long #define f ...

  7. 两个select一个选中,另一个就没有选中的那个值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. L1-006 连续因子 (20 分) 模拟

    一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的 ...

  9. Spring(六)Spring执行流程

    Spring MVC工作流程图 Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherS ...

  10. Scala-Unit-1-概述及安装

    一.Scala简介 官网:www.scala-lang.org Scala语言很强大,它集成了面对对象和函数式编程的特点,并且运行在JVM(Java Virtual Machine)上,即必须安装jd ...