代码如下:
# coding:utf8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import pymysql
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@127.0.0.1:3306/flaskbooklibrary"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
db = SQLAlchemy(app)
# 管理员
class Admin(db.Model):
__tablename__ = "admin"
id = db.Column(db.Integer, primary_key=True) # 编号
name = db.Column(db.String(100), unique=True) # 昵称
pwd = db.Column(db.String(100)) # 密码
email = db.Column(db.String(100), unique=True) # 邮箱
phone = db.Column(db.String(11)) # 手机号码
# 用户
class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True) # 编号
name = db.Column(db.String(100)) # 用户名称
sex = db.Column(db.String(100)) # 性别
photo=db.Column(db.String(300))#头像
phone=db.Column(db.String(20))#手机号码
identify=db.Column(db.String(20), unique=True)#身份证号
pwd=db.Column(db.String(50))#密码
addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间
# 标签
class SysFunction(db.Model):
__tablename__ = "sysfunction"
funid = db.Column(db.Integer, primary_key=True) #主键
funName = db.Column(db.String(300), unique=True) # 功能名称
funUrl =db.Column(db.String(300), unique=True)#路径
funpid =db.Column(db.Integer)#父ID
funstate =db.Column(db.Integer)#状态
class BookType(db.Model):
__tablename__ = "booktype"
tid = db.Column(db.Integer, primary_key=True) # 编号
name= db.Column(db.String(255), unique=True)
# 书籍
class Book(db.Model):
__tablename__ = "book"
bid = db.Column(db.Integer, primary_key=True) # 编号
bookName = db.Column(db.String(255)) # s书名
bookNum=db.Column(db.String(255)) #图书编号
author=db.Column(db.String(255))#作者
num=db.Column(db.Integer)#数量
press=db.Column(db.String(255))#出版社
bookType = db.relationship("BookType", backref='book') #
class History(db.Model):
__tablename__ = "history"
id=db.Column(db.Integer, primary_key=True) # 编号
user = db.relationship("User", backref='history')#用户
book=db.relationship("Book", backref='history')#图书
beginTime=db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间
endTime=db.Column(db.DateTime, index=True)#截至日期
status=db.Column(db.String(255))#借书状态
num=db.Column(db.Integer)#借书数量
class Comment(db.Model):
__tablename__ = "comment"
id = db.Column(db.Integer, primary_key=True)
user = db.relationship("User", backref='comment') # 用户
book = db.relationship("Book", backref='comment') # 图书
content=db.Column(db.String(255))#评论内容
commentDate=db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间
# if __name__ == "__main__":
db.create_all() # 根据以上数据模型,逆向生成数据库表
参考GPT:您的代码中,db.create_all()语句用于根据定义的数据模型在数据库中创建相应的表格。这个函数通常在应用程序初始化期间使用,它会检查定义的每个数据模型,如果相应的表格不存在,就会在数据库中创建它们。
在您的代码中,如果您将db.create_all()注释掉,那么在第一次运行应用程序时,将不会在数据库中创建相应的表格,这将导致您无法向数据库中添加任何数据。因此,建议在初始化应用程序时使用db.create_all()函数来确保在数据库中创建相应的表格。
在 Flask 中使用 SQLAlchemy 创建数据库表格,可以通过两种方式实现:
1.手动创建表格
手动创建表格需要在数据库中创建相应的表格,例如在 MySQL 中使用以下 SQL 语句创建 admin 表格:
CREATE TABLE `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`pwd` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`phone` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
手动创建表格需要在数据库中手动创建相应的表格,比较繁琐,容易出错。
2.自动创建表格
自动创建表格使用 SQLAlchemy 提供的 create_all() 函数,通过定义的数据模型自动创建数据库表格,比较方便和高效。
根据以上数据模型,您可以在代码中使用以下语句自动创建数据库表格:
db.create_all()
在上述代码中,db 是通过 SQLAlchemy(app) 创建的 SQLAlchemy 对象,create_all() 函数会根据定义的数据模型,自动创建相应的数据库表格。建议在应用程序初始化期间使用此语句来确保数据库中存在相应的表格。
需要注意的是,如果您在之前已经手动创建了相应的表格,那么在使用 create_all() 函数时,它不会覆盖您手动创建的表格,而是只会创建缺少的表格,因此您不需要担心数据丢失的问题。