麻烦大神帮忙看一下,sqlchemy无法把数据传到mysql数据库,数据库里面一直是空的。代码如下
from flask import Flask, render_template, flash, request,redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, EqualTo
import pymysq
app = Flask(__name__)
# 数据库配置:数据库地址和关闭自动跟踪修改
app.config['SQLALCHEMY_URI'] = 'mysql+pymysql://root:wyx7208801@127.0.0.1/flask_books'
app.config['SQLALCHEMY_TRANCE_MODIFICATIONS'] = False
app.secret_key = 'itmaima'
db = SQLAlchemy(app)
# 定义书和作者模型
# 作者模型
class Author(db.Model):
# 表名
__tablename__ = 'authors'
# 字段
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(16), unique=True)
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(16), unique=True)
author_id = db.Column(db.Integer, db.ForeignKey('authors.id'))
# 自定义表单类
class AuthorForm(FlaskForm):
author = StringField('作者', validators=[DataRequired()])
book = StringField('书籍', validators=[DataRequired()])
submit = SubmitField('提交')
@app.route('/', methods=['POST', 'GET'])
def index():
#查询所有的作者信息
author_form = AuthorForm()
authors = Author.query.all()
if author_form.validate_on_submit():
author_name = author_form.author.data
book_name = author_form.book.data
author = Author.query.filter_by(name=author_name).first()
if author:
book = Book.query.filter_by(name=book_name).first(
if book:
flash('已存在重复书籍')
else:
try:
new_book = Book(name=book_name, author_id=author.id)
db.session.add(new_book)
db.session.commit()
except Exception as e:
print(e)
flash('添加书籍失败')
db.session.rollback()
else:
try:
new_author = Author(name=author_name)
db.session.add(new_author)
db.session.commit()
new_book = Book(name=book_name, author_id=new_author.id)
db.session.add(new_book)
db.session.commit()
except Exception as e:
flash('添加作者和书籍失败')
print(e)
db.session.rollback(
else:
if request.method == 'post':
flash('参数不全'
return render_template('index.html', authors=authors, form=author_form)
@app.route('/delete_book/<book_id>')
def delete_book(book_id)
book = Book.query.get(book_id)
if book:
try:
db.session.delete(book)
db.session.commit()
except Exception as e:
print(e)
flash('删除书籍出错')
db.session.rollback()
else:
flash('找不到书籍')
return redirect(url_for('index')) # url_for需要传入视图函数名,返回该视图函数和对应的路由地址
@app.route('/delete_author/<author_id>')
def delete_author(author_id):
author = Author.query.get(author_id)
if author:
try:
book_delete = Book.query.filter_by(author_id=author.id).first()
# 查询之后直接删除
# book_delete = Book.query.filter_by(author_id=author_id).delete()
db.session.delete(book_delete)
db.session.delete(author)
db.session.commit()
except Exception as e:
print(e)
flash('删除作者失败')
else:
flash('未找到作者')
db.session.rollback()
return redirect(url_for('index'))
if __name__ == '__main__':
db.drop_all()
db.create_all()
au1 = Author(name='wang')
au2 = Author(name='yu')
au3 = Author(name='xuan')
db.session.add_all([au1, au2, au3])
db.session.commit()
book1 = Book(name='tian', author_id=au1.id)
book2 = Book(name='xia', author_id=au1.id)
book3 = Book(name='gui', author_id=au2.id)
book4 = Book(name='xin', author_id=au3.id)
db.session.add_all([book1, book2, book3, book4])
db.session.commit()
app.run(debug=True)
from flask import Flask, render_template, flash, request,redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, EqualTo
import pymysq
app = Flask(__name__)
# 数据库配置:数据库地址和关闭自动跟踪修改
app.config['SQLALCHEMY_URI'] = 'mysql+pymysql://root:wyx7208801@127.0.0.1/flask_books'
app.config['SQLALCHEMY_TRANCE_MODIFICATIONS'] = False
app.secret_key = 'itmaima'
db = SQLAlchemy(app)
# 定义书和作者模型
# 作者模型
class Author(db.Model):
# 表名
__tablename__ = 'authors'
# 字段
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(16), unique=True)
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(16), unique=True)
author_id = db.Column(db.Integer, db.ForeignKey('authors.id'))
# 自定义表单类
class AuthorForm(FlaskForm):
author = StringField('作者', validators=[DataRequired()])
book = StringField('书籍', validators=[DataRequired()])
submit = SubmitField('提交')
@app.route('/', methods=['POST', 'GET'])
def index():
#查询所有的作者信息
author_form = AuthorForm()
authors = Author.query.all()
if author_form.validate_on_submit():
author_name = author_form.author.data
book_name = author_form.book.data
author = Author.query.filter_by(name=author_name).first()
if author:
book = Book.query.filter_by(name=book_name).first(
if book:
flash('已存在重复书籍')
else:
try:
new_book = Book(name=book_name, author_id=author.id)
db.session.add(new_book)
db.session.commit()
except Exception as e:
print(e)
flash('添加书籍失败')
db.session.rollback()
else:
try:
new_author = Author(name=author_name)
db.session.add(new_author)
db.session.commit()
new_book = Book(name=book_name, author_id=new_author.id)
db.session.add(new_book)
db.session.commit()
except Exception as e:
flash('添加作者和书籍失败')
print(e)
db.session.rollback(
else:
if request.method == 'post':
flash('参数不全'
return render_template('index.html', authors=authors, form=author_form)
@app.route('/delete_book/<book_id>')
def delete_book(book_id)
book = Book.query.get(book_id)
if book:
try:
db.session.delete(book)
db.session.commit()
except Exception as e:
print(e)
flash('删除书籍出错')
db.session.rollback()
else:
flash('找不到书籍')
return redirect(url_for('index')) # url_for需要传入视图函数名,返回该视图函数和对应的路由地址
@app.route('/delete_author/<author_id>')
def delete_author(author_id):
author = Author.query.get(author_id)
if author:
try:
book_delete = Book.query.filter_by(author_id=author.id).first()
# 查询之后直接删除
# book_delete = Book.query.filter_by(author_id=author_id).delete()
db.session.delete(book_delete)
db.session.delete(author)
db.session.commit()
except Exception as e:
print(e)
flash('删除作者失败')
else:
flash('未找到作者')
db.session.rollback()
return redirect(url_for('index'))
if __name__ == '__main__':
db.drop_all()
db.create_all()
au1 = Author(name='wang')
au2 = Author(name='yu')
au3 = Author(name='xuan')
db.session.add_all([au1, au2, au3])
db.session.commit()
book1 = Book(name='tian', author_id=au1.id)
book2 = Book(name='xia', author_id=au1.id)
book3 = Book(name='gui', author_id=au2.id)
book4 = Book(name='xin', author_id=au3.id)
db.session.add_all([book1, book2, book3, book4])
db.session.commit()
app.run(debug=True)