piaoyiren 2023-03-23 08:17 采纳率: 58.8%
浏览 34
已结题

flask.create_all()问题

代码如下:


# 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() # 根据以上数据模型,逆向生成数据库表


  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-03-23 08:57
    关注

    参考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() 函数时,它不会覆盖您手动创建的表格,而是只会创建缺少的表格,因此您不需要担心数据丢失的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月31日
  • 已采纳回答 3月23日
  • 赞助了问题酬金15元 3月23日
  • 创建了问题 3月23日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图