我正在读一本关于烧瓶开发的书,我对python一般都很陌生。
文件布局:
Project
|
|-- App
| |-- __init__.py
| |-- models.py
|
| main.py
__init__.py
内的代码:
from flask import Flask
from flask.ext.bootstrap import Bootstrap
from flask.ext.sqlalchemy import SQLAlchemy
import os
from config import options
basedir = os.path.abspath(os.path.dirname(__file__))
bootstrap = Bootstrap()
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] =\
'sqlite:///' + os.path.join(basedir, 'database_test.sqlite')
bootstrap.init_app(app)
db.init_app(app)
with app.app_context():
db.create_all()
print("DB created")
return(app)
我一直在研究网站上的其他人的问题,主要是here我发现使用with app.app_context()
,并在不使用app
的情况下实例化数据库构造函数。
这是我的models.py
文件:
from . import db
class User(db.Model):
__tablename__ = 'Users'
account_id = db.Column(db.Integer, primary_key=True)
personaname = db.Column(db.String(50), unique=False)
steamid = db.Column(db.String(64))
avatar = db.Column(db.String(200))
profileurl = db.Column(db.String(128))
is_personaname_real = db.Column(db.Integer)
def __repr__(self):
return '<User {0}>'.format(self.personaname)
然后我来自main.py
的代码只是:
from app import create_app
app = create_app()
如果我将User
类移到__init__.py
函数中,那么一切都很好。但是,当User
类位于其自己的文件中时,数据库将创建为空。我尝试过使用其他导入方式,可能是类似From app.__init__.py Import db
的方法,但是也没有。
答案 0 :(得分:2)
由于直接在__init__.py
中定义了您的模型,因此您需要将模型导入__init__.py
。
您可以在创建__init__.py
对象后在SQLAlchemy
中添加导入:
db = SQLAlchemy()
from .models import User
这样可行,但对我来说感觉非常错误和肮脏。我不太了解Flask,但这个答案表明这对Flask来说是正常的:https://stackoverflow.com/a/19008403/21945
答案 1 :(得分:0)
这应该有效,似乎你错过了if语句
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run()