Flask----图书管理数据库设计

注意:在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


你可能感兴趣的:(Flask----图书管理数据库设计)