flask创建数据表时无报错且未创建成功的解决办法

45 篇文章 1 订阅
27 篇文章 1 订阅

在flask中,我们使用Flask-SQLAlchemy管理数据库,第一步是在给定的数据库中创建数据表,通过建立好模型之后,通过create_all命令即可把所有的继承db.Model的数据表类在数据库中创建。语句如下

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:root@localhost:3306/flask_test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
app.config['SQLALCHEMY_ECHO'] = True
db=SQLAlchemy(app)

class Role(db.Model):
    __tablename__='roles'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(16),unique=True)

class User(db.Model):
    __tablename__='users'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(16),unique=True)
    role_id=db.Column(db.Integer,db.ForeignKey('roles.id'))

@app.route('/',methods=['post','get'])
def index():
    return 'hello'

if __name__=='__main__':
	db.drop_all()
	db.create_all()
    app.run(debug=True)

但是当我们执行程序的时候却发现,程序未报错,但是数据库中也没有增加数据表。然后在很多入门视频教程里都是这么写的。这是因为create_all放在main方法中,但是运行此程序时并不会执行main方法。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:root@localhost:3306/flask_test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
app.config['SQLALCHEMY_ECHO'] = True
db=SQLAlchemy(app)

class Role(db.Model):
    __tablename__='roles'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(16),unique=True)


class User(db.Model):
    __tablename__='users'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(16),unique=True)
    role_id=db.Column(db.Integer,db.ForeignKey('roles.id'))


@app.route('/',methods=['post','get'])
def index():
    return 'hello'


# 删除表
db.drop_all()
# 创建表
db.create_all()

if __name__=='__main__':
    app.run(debug=True)

解决方法:将如下两条语句放在main方法之外即可。

db.drop_all()
db.create_all()

在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Regent Wan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值