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

在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()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Zeno_wrj/article/details/107291530