flask内容之数据库的管理

  1 #! /usr/bin/env python
  2 # *-* coding: utf-8 *-*
  3 
  4 
  5 from flask import Flask, flash, redirect
  6 from flask import url_for
  7 from flask import request
  8 from flask_wtf import FlaskForm
  9 from wtforms import StringField, SubmitField
 10 from wtforms.validators import InputRequired
 11 from flask import render_template
 12 from flask_sqlalchemy import SQLAlchemy
 13 
 14 app = Flask(__name__)
 15 
 16 # 配置数据库连接地址
 17 app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:qw123666@localhost/test?charset=utf8"
 18 # 是否追踪数据库的修改
 19 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
 20 app.config["SQLALCHEMY_ECHO"] = False
 21 app.secret_key = "123456"
 22 
 23 # 初始化 SQLAlchemy 对象
 24 db = SQLAlchemy(app)
 25 
 26 
 27 # 定义模型类-作者
 28 class Author(db.Model):
 29     __tablename__ = 'author'
 30     id = db.Column(db.Integer, primary_key=True)
 31     name = db.Column(db.String(32), unique=True)
 32     book = db.relationship('Book', backref='author')
 33 
 34     # def __repr__(self):
 35     #     return 'Author:%s' % self.name
 36 
 37 
 38 # 定义模型类-书名
 39 class Book(db.Model):
 40     __tablename__ = 'books'
 41     id = db.Column(db.Integer, primary_key=True)
 42     name = db.Column(db.String(32))
 43     author_id = db.Column(db.Integer, db.ForeignKey(Author.id))
 44 
 45     # def __str__(self):
 46     #     return 'Book:%s,%s' % (self.info, self.lead)
 47 
 48 
 49 class AddBookForm(FlaskForm):
 50     author = StringField("作者", validators=[InputRequired("请输入作者名")])
 51     book = StringField("书名", validators=[InputRequired("请输入书名")])
 52     submit = SubmitField("添加")
 53 
 54 
 55 @app.route("/index", methods=["get", "post"])
 56 def index():
 57     # 获取所有的作者
 58     bookform = AddBookForm()
 59     if request.method == "POST":
 60         # 取值
 61         if bookform.is_submitted():
 62             author_name = bookform.author.data
 63             book_name = bookform.book.data
 64             #     查指定作者的名字是否存在
 65             author = Author.query.filter(Author.name == author_name).first()
 66             if not author:
 67                 try:
 68                     # 增加作者
 69                     author_obj = Author(name=author_name)
 70                     db.session.add(author_obj)
 71                     db.session.commit()
 72                     # 增加书名
 73                     book_obj = Book(name=book_name, author_id=author_obj.id)
 74                     db.session.add(book_obj)
 75                     db.session.commit()
 76                 except Exception as e:
 77                     db.session.rollback()
 78                     flash("添加失败")
 79             else:
 80                 try:
 81                     book_obj = Book(name=book_name, author_id=author.id)
 82                     db.session.add(book_obj)
 83                     db.session.commit()
 84                 except Exception as e:
 85                     db.session.rollback()
 86                     flash("添加失败")
 87         # 往数据开中写入值
 88         authors = Author.query.all()
 89         return render_template("index.html", authors=authors, form=bookform)
 90 
 91     authors = Author.query.all()
 92     return render_template("index.html", authors=authors, form=bookform)
 93 
 94 
 95 @app.route("/delete_author/<author_id>")
 96 def delete_author(author_id):
 97     author_obj = Author.query.get(author_id)
 98     if author_obj:
 99         try:
100             Book.query.filter(Book.author_id == author_id).delete()
101             db.session.delete(author_obj)
102             db.session.commit()
103         except Exception as e:
104             print("删除作者名失败")
105             db.session.rollback()
106     else:
107         flash("没有这个作者")
108     authors = Author.query.all()
109     bookform = AddBookForm()
110 
111     return redirect(url_for('index'))
112 
113 
114 @app.route("/delete_book/<book_id>")
115 def delete_book(book_id):
116     try:
117         # 书的对象
118         book_obj = Book.query.get(book_id)
119         print(book_obj)
120         # 书的作者的id
121         author_id = book_obj.author.id
122         # author_id = book_obj.Author.id
123         print(author_id)
124         if book_obj:
125             db.session.delete(book_obj)
126             author_count = len(book_obj.author.book)
127             if author_count == 0:
128                 # author_obj = Author.query.get(author_id)
129                 author_objs = Author.query.filter(Author.id == author_id).all()
130                 print("author_obj", author_objs)
131                 for author_obj in author_objs:
132                     db.session.delete(author_obj)
133 
134     except Exception as e:
135         print("没有这本书")
136     db.session.commit()
137 
138     authors = Author.query.all()
139     bookform = AddBookForm()
140     return render_template("index.html", authors=authors, form=bookform)
141 
142 
143 if __name__ == '__main__':
144     app.run(debug=True)
图书管理系统(数据库基本的操作)
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <form method="post" action="http://127.0.0.1:5000/index">
 9     {{ form.csrf_token() }}<br/>
10     {{ form.author.label }}{{ form.author }}<br/>
11     {{ form.book.label }}{{ form.book }}<br/>
12     {{ form.submit }}<br/>
13     {% for message in get_flashed_messages() %}
14         {{ message }}
15     {% endfor %}
16 </form>
17 <br/>
18 <h1>图书管理界面</h1>
19 <ul>
20     {% for  author in authors %}
21         <li> {{ author.name }}<a href="/delete_author/{{ author.id }}">删除作者</a></li>
22         <ul>
23             {% for  book in author.book %}
24                 <li> {{ book.name }}<a href="/delete_book/{{ book.id }}">删除书名</a></li>
25             {% endfor %}
26         </ul>
27     {% endfor %}
28 </ul>
29 
30 </body>
31 </html>
前端展示代码

猜你喜欢

转载自www.cnblogs.com/cerofang/p/9216303.html