db.create_all()不会抛出任何错误,也不会创建表

时间:2017-09-12 05:22:02

标签: python flask flask-sqlalchemy

这是我的文件结构:

/
/apitestproject
    /models
        __init__.py
        users.py
        items.py
    /resources
        __init__.py
        users.py
        items.py
    __init__.py
    index.py
.deployment
deploy.cmd
requirements.txt
run_waitress_server.py
runserver.py
web.config

在我的主__init__.py文件中:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

POSTGRES = {
    'user': 'admin_user@pracap',
    'pw': 'the_password',
    'db': 'apitest',
    'host': 'pracap.postgres.database.azure.com',
    'port': '5432',
}
URL = 'postgresql://{}:{}@{}:{}/{}'.format(POSTGRES['user'], POSTGRES['pw'], POSTGRES['host'], POSTGRES['port'], POSTGRES['db'])

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

import apitestproject.index

在我的index.py文件中,我有:

from flask import Flask
from flask_restful import Api
from apitestproject import app, db


@app.before_first_request
def create_tables():
    db.create_all()

@app.route('/')
@app.route('/home')
def home():
    return "I'm the default route"

在我的/models/users.py文件中,我有:

from apitestproject import db

class UserModel(db.Model):
    __tablename__ = 'users'

    id = db.column(db.string, primary_key=True)
    name = db.column(db.string(50))
    address = db.column(db.string(144))
    salary = db.column(db.numeric(12, 2))
    position = db.column(db.string(50))
    password = db.column(db.string(50))

控制台没有抛出任何错误,我甚至可以在没有任何错误提示的情况下正常运行。但是没有创建表格。知道我可能做错了什么吗?我已经和flask / sqlalchemy合作了一个多月了,我开始和DB一起工作了。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我认为你需要使用flask-migrate作为一个很好的选择: 只需找到关于它的this教程:

关于它的简短描述就在这里:

  

迁移允许我们管理我们对模型所做的更改,以及   在数据库中传播这些更改。例如,如果以后我们   更改其中一个模型中的字段,我们需要做的就是   是创建并应用迁移,数据库将反映出来   变化

通过

安装后
pip install flask-migrate 

像这样编辑您的 init .py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
POSTGRES = {
    'user': 'admin_user@pracap',
    'pw': 'the_password',
    'db': 'apitest',
    'host': 'pracap.postgres.database.azure.com',
    'port': '5432',
}
URL = 'postgresql://{}:{}@{}:{}/{}'.format(POSTGRES['user'], POSTGRES['pw'], POSTGRES['host'], POSTGRES['port'], POSTGRES['db'])

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
migrate = Migrate(app, db)

import apitestproject.index

然后通过删除你将通过命令行执行的db创建来编辑index.py。

from flask import Flask
from flask_restful import Api
from apitestproject import app, db

@app.route('/')
@app.route('/home')
def home():
    return "I'm the default route"

之后转到您的应用程序目录并导出烧瓶应用程序以及您的应用程序的运行脚本是什么? :

cmd中的

执行此操作:

export FLASK_APP=your_runScript.py

然后执行以下两个命令来迁移db:

flask db init

创建迁移文件夹

和:

flask db migrate 创建第一个迁移 并且:

flask db upgrade 

将更改升级到db

查找有关flask-migrate软件包的更多here