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 ...
随机推荐
- linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号
1:linux操作系统 netstat 命令用于显示各种网络相关信息,即网络状态.而我主要使用netstat查看端口号是否启动: 参数详情: 1 -a (all)显示所有选项,默认不显示LISTEN相 ...
- Javascript中函数提升和变量提升
词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active ...
- SqlBulkCopy批量插入数据神器
1.简单例子 class Program { static void Main(string[] args) { Stopwatch sw = new Stopwatch(); DataTable d ...
- WPF数据爬取小工具-某宝推广位批量生成,及订单爬取 记:接单最痛一次的感悟
项目由来:上月闲来无事接到接到一个单子,自动登录 X宝平台,然后重定向到指定页面批量生成推广位信息:与此同时自动定时同步订单数据到需求提供方的Java服务. 当然期间遇到一个小小的问题就是界面样式的问 ...
- Sql与C#中日期格式转换总结
SQL中的转换方法: 一.将string转换为datetime,主要是使用Convert方法, 方法,Convert(datetime [ ( length ) ] , expression, [st ...
- DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)
一.错误情况 环境:win7+iis7.0 DirectoryEntry配置IIS7出现如下错误 或者是 下面一段代码在IIS6.0下运转正常,但IIS7.0下运转会出错: System.Direct ...
- 【Android】Android 广播大全
[Android]Android 广播大全 String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式. String ALL_APPS_ACTION 动作:列举所有可用的应 ...
- python全栈开发day78、79 --bss项目
一.回顾 1. BBS项目 CMS 1. 登录 1. form组件 2. auth模块 3. 验证码 2. 注册 1. form组件 1. 生成html代码 直接for循环form_obj,就能够遍历 ...
- Lunch War with the Donkey CSU - 2084
Jingze is a big figure in California State University for his stubbornness. Because of his new failu ...
- P2158 [SDOI2008]仪仗队
P2158 [SDOI2008]仪仗队图是关于y=x对称的,横纵坐标一定是互质的否则在之前就被扫过了,所以就可以用欧拉函数再*2就完了. #include<iostream> #inclu ...