注意:在pycharm中进行数据库迁移之前要将数据库启动连接
Flask框架的导入信息和类
from flask import Flask, render_template, request, session
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_wtf import CSRFProtect
#实例化Flask类
app = Flask(__name__)
manager=Manager(app)
db=SQLAlchemy(app)
migrate=Migrate(app,db)
manager.add_command('db',MigrateCommand)
app.config['SECRET_KEY']='wadwadwadwadwad'
CSRFProtect(app)
#配置信息类
class Config(object):
DEBUG=True
SQLALCHEMY_DATABASE_URI ='mysql://root:root@localhost:3306/my_book'
SQLALCHEMY_TRACK_MODIFICATIONS =True
SQLALCHEMY_COMMIT_TEARDOWN =True
SQLALCHEMY_ECHO =True
app.config.from_object(Config)
#读者等级表 读者与读者等级的关系是一对多 一个读者等级对应多个读者
'''
读者等级id
读者等级名称
读者等级可借数量
读者等级最大金额
读者等级还书期限
'''
class ReaderGrade(db.Model):
__tablename__='reader_grade'
id=db.Column(db.Integer,autoincrement=True,primary_key=True)
grand_name=db.Column(db.String(50),nullable=True)
quan_tity=db.Column(db.Integer,nullable=True)
max_money=db.Column(db.Float,nullable=True)
date_amount=db.Column(db.Integer,nullable=True)
reader=db.relationship('Reader',backref='reader_grade')
def __init__(self,id,grand_name,quan_tity,max_money,date_amount):
self.id=id
self.grand_name=grand_name
self.quan_tity=quan_tity
self.max_money=max_money
self.date_amount=date_amount
def to_dic(self):
grade_dic={
'id':self.id,
'grand_name':self.grand_name,
'quan_tity':self.quan_tity,
'max_money':self.max_money,
'date_amount':self.date_amount
}
return grade_dic
#读者模块 读者为一方 读者等级为多方
'''
读者类 读者id
读者姓名 reader_name
读者密码 reader_pass
读者信誉度 reader_credit
读者地址 reader_address
读者电话 reader_phone
读者是否注册激活
读者等级id外键 ForeignKey
'''
class Reader(db.Model):
__tablename__='reader'
id=db.Column(db.Integer,autoincrement=True,primary_key=True)
reader_name=db.Column(db.String(50),nullable=False)
reader_pass=db.Column(db.String(50),nullable=False)
reader_credit=db.Column(db.Integer,nullable=False)
address=db.Column(db.String(50),nullable=True)
phone=db.Column(db.String(11),nullable=True)
#判断是否激活 1表示已经注册未登录可以修改密码 2表示已经登陆过
is_activate=db.Column(db.Integer,nullable=True)
#外键等级id和读者等级关系相关联
grand_id=db.Column(db.Integer,db.ForeignKey('reader_grade.id'))
#读者借书和借书表格相关联
borrow_book=db.relationship('Borrow_Book',backref='reader')
def __init__(self,reader_name,reader_pass,reader_credit,address,phone,is_activate,grand_id):
self.reader_name=reader_name
self.reader_pass=reader_pass
self.reader_credit=reader_credit
self.address=address
self.phone=phone
self.is_activate=is_activate
self.grand_id=grand_id
def to_dict(self):
reader_dic={
'id':self.id,
'reader_name':self.reader_name,
'reader_pass':self.reader_pass,
'reader_credit':self.reader_credit,
'address':self.address,
'phone':self.phone,
'is_activate':self.is_activate,
'grand_id':self.grand_id
}
return reader_dic
"""
书籍类别
书籍类别id
书籍类别名称
"""
class BookType(db.Model):
__tablename__='booktype'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
type_name=db.Column(db.String(50),nullable=False)
#书籍和书籍类相关 反向引用自己的表名
book=db.relationship('Book',backref='booktype')
def __init__(self,id,type_name):
self.id=id
self.type_name=type_name
def to_dict(self):
type_dict={
'id':self.id,
'type_name':self.type_name
}
return type_dict
"""
图书id
图书名称
图书作者名称
图书出版社名称
图书版面图片
图书说明
图书单价
图书出租次数
图书首字母
书籍类别 外键
与书籍表关联的表格关系为借书表
"""
class Book(db.Model):
__tablename__='book'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
name=db.Column(db.String(50),nullable=False)
book_quantity=db.Column(db.Integer,nullable=False)
book_info=db.Column(db.String(100),nullable=True)
book_img=db.Column(db.String(50),nullable=True)
book_author=db.Column(db.String(50),nullable=True)
book_price=db.Column(db.Integer,nullable=True)
book_publisher=db.Column(db.String(50),nullable=True)
book_sentnum=db.Column(db.Integer,nullable=True)
book_char=db.Column(db.String(10),nullable=True)
#书籍类别和书籍类别表的id一致 添加外键将两个表格进行联系
book_type=db.Column(db.Integer,db.ForeignKey('booktype.id'))
borrow_book=db.relationship('Borrow_Book',backref='boook')
def to_dict(self):
book_dict={
'id' :self.id,
'name' :self.name,
'book_quantity':self.book_quantity,
'book_info':self.book_info,
'book_img':self.book_img,
'book_author':self.book_author,
'book_price':self.book_price,
'book_publisher':self.book_publisher,
'book_sentnum':self.book_sentnum,
'book_char':self.book_char,
'book_type':self.book_type
}
return book_dict
def __init__(self,id,name,book_quantity,book_info,book_img,book_author,book_price,book_publisher,book_sentnum,book_char,book_type):
self.id=id
self.name =name
self.book_quantity =book_quantity
self.book_info =book_info
self.book_img =book_img
self.book_author =book_author
self.book_price =book_price
self.book_publisher =book_publisher
self.book_sentnum =book_sentnum
self.book_char =book_char
self.book_type =book_type
"""
角色表
角色id
角色名称
指定管理员对象 与角色表关系关联的为管理员表
"""
class Role(db.Model):
__tablename__='role'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
role_name=db.Column(db.String(50),nullable=True)
def __init__(self,id,role_name):
self.id=id
self.role_name=role_name
def to_dict(self):
role_dict={
'id':self.id,
'role_name':self.role_name
}
return role_dict
"""
管理员表
管理员id
管理员名称
管理员密码
管理员真实名称
管理员地址
管理员电话
管理员上班时间
管理员下班时间
管理员的角色id 外键
管理员关联的关系表为借书表
"""
class BookManager(db.Model):
__tablename__='book_manager'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
manager_name=db.Column(db.String(50),nullable=False)
manager_pass=db.Column(db.String(20),nullable=False)
reality_name=db.Column(db.String(50),nullable=True)
manager_address=db.Column(db.String(100),nullable=True)
manager_phone=db.Column(db.String(11),nullable=True)
duty_time=db.Column(db.Time,nullable=True)
leave_time=db.Column(db.Time,nullable=True)
role_id=db.Column(db.Integer,db.ForeignKey('role.id'))
borrow_book=db.relationship('Borrow_Book',backref='book_manager')
def to_dict(self):
manager_dict={
'id':self.id,
'manager_name':self.manager_name,
'manager_pass':self.manager_pass,
'reality_name':self.reality_name,
'manager_address':self.manager_address,
'manager_phone':self.manager_phone,
'duty_time':self.duty_time,
'leave_time':self.leave_time,
'role_id':self.role_id
}
return manager_dict
def __init__(self,manager_name,manager_pass,reality_name,manager_address,manager_phone,duty_time,leave_time,role_id):
self.id=id,
self.manager_name=manager_name,
self.manager_pass=manager_pass,
self.reality_name=reality_name,
self.manager_address=manager_address,
self.manager_phone=manager_phone,
self.duty_time=duty_time,
self.leave_time=leave_time,
self.role_id=role_id
"""
借书表
借书id
借书日期
还书日期
书籍状况
书籍id外键
读者id外键
管理员id外键
"""
class Borrow_Book(db.Model):
__tablename__='borrowbook'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
borrow_date=db.Column(db.DateTime,nullable=False)
restore_date=db.Column(db.DateTime,nullable=True)
book_state=db.Column(db.String(50),nullable=True)
book_id=db.Column(db.Integer,db.ForeignKey('book.id'))
reader_id=db.Column(db.Integer,db.ForeignKey('reader.id'))
manager_id=db.Column(db.Integer,db.ForeignKey('book_manager.id'))
def to_dict(self):
borrow_dict={
'id':self.id,
'borrow_date':self.borrow_date,
'restore_date':self.restore_date,
'book_state':self.book_state,
'book_id':self.book_id,
'reader_id':self.reader_id,
'manager_id':self.manager_id
}
return borrow_dict
def __init__(self,id,borrow_date,restore_date,book_state,book_id,reader_id,manager_id):
self.id=id,
self.borrow_date=borrow_date,
self.restore_date=restore_date,
self.book_state=book_state,
self.book_id=book_id,
self.reader_id=reader_id,
self.manager_id=manager_id
初始化数据库信息
python app.py db init
对数据库进行迁移
python app.py db migrate -m '注释'
对数据库进行迁移转化
python app.py db upgrade