Python Shell无法运行,不运行解释器(Flask)

时间:2016-02-20 19:45:45

标签: python shell flask flask-sqlalchemy

我一直在跟随Miguel Grinberg的Flask Web Development,并在尝试创建数据库角色时遇到麻烦。本书建议我使用以下命令来运行shell并生成python shell并创建数据库角色:

http://i.stack.imgur.com/BdMx5.png

但是当相同的命令它没有给我一个python shell,我可以编写命令。它只是启动服务器并运行程序,让我无法执行创建数据库角色所需的命令。

http://i.stack.imgur.com/czTqF.png

在这两种情况下,hello.py只是一个带有相关数据库类的简单烧瓶程序。不知道为什么会这样。我已经激活了虚拟环境并按照文本中的描述完成了所有操作。有什么想法吗?

以下是hello.py

中的全部代码
    # imports
    from flask.ext.sqlalchemy import SQLAlchemy
    from flask import Flask, render_template
    import os
    from flask.ext.wtf import Form
    from wtforms import StringField, SubmitField
    from wtforms.validators import Required
    from flask.ext.bootstrap import Bootstrap

    # App and DB config
    basedir = os.path.abspath(os.path.dirname(__file__))
    app = Flask(__name__)
    bootstrap = Bootstrap(app)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    db = SQLAlchemy(app)

    # classes
    class Role(db.Model):
        __tablename__ = 'roles'
        id = db.Column(db.Integer, primary_key = True)
        name = db.Column(db.String(64), unique=True)
        users = db.relationship('User', backref='role')

        def __repr__(self):
            return '<Role %r>' % self.name

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

        def __repr__(self):
            return '<User %r>' % self.username

    class NameForm(Form):
        name = StringField('What is your name?',validators=[Required()])
        favorite = StringField('What is your favorite food?',validators=[Required()])
        submit = SubmitField('Submit')


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

1 个答案:

答案 0 :(得分:5)

无论您遵循何种说明,都假定您已设置Flask-Script。您的代码没有,它只是为了直接运行应用程序而编写的。安装Flask-Script并修改代码以包含以下部分,然后按照描述运行shell。

pip install flask-script
from flask_script import Manager

manager = Manager(app)

if __name__ == '__main__':
    manager.run()
$ python hello.py shell
>>> from hello import db
>>> db.create_all()