Flask 我如何在蟒蛇身上使用长颈瓶?

Flask 我如何在蟒蛇身上使用长颈瓶?,flask,pythonanywhere,flask-migrate,Flask,Pythonanywhere,Flask Migrate,有人有在pythonywhere上成功使用flask迁移的例子吗?有没有人举一个简单的例子来说明使用迁移的app.py应该是什么样子的?大致如下: from flask import Flask, request, render_template from flask.ext.sqlalchemy import SQLAlchemy from flask.ext.migrate import Migrate, MigrateCommand from flask.ext.script import

有人有在pythonywhere上成功使用flask迁移的例子吗?有没有人举一个简单的例子来说明使用迁移的app.py应该是什么样子的?大致如下:

from flask import Flask, request, render_template
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.migrate import Migrate, MigrateCommand
from flask.ext.script import Manager
app = Flask(__name__ )
app.secret_key = 'This is really unique and secret'
app.config['SQLALCHEMY_DATABASE_URI'] = '<whatever>'
db = SQLAlchemy(app)
db.create_all()
manager = Manager( app )
migrate = Migrate( app, db )
manager.add_command('db', MigrateCommand )

它无法生成迁移存储库。这可能是pythonanywhere上的文件权限问题吗?

本文作者

其思想是在开发环境中生成数据库存储库。您必须将存储库和源文件提交给源代码管理

然后,在宿主服务上安装应用程序时,只需运行
升级
命令即可创建数据库并将其迁移到最新版本

更新:根据下面的评论,您希望从头开始开发应用程序。我自己刚刚测试过,能够创建一个数据库存储库,创建一个迁移,并应用它。我所做的是启动Python bash控制台。这是我的完整课程的副本:

17:39 ~ $ mkdir dbtest
17:39 ~ $ cd dbtest
17:39 ~/dbtest $ virtualenv venv
New python executable in venv/bin/python2.7
Also creating executable in venv/bin/python
Installing setuptools............done.
Installing pip...............done.
17:39 ~/dbtest $ . venv/bin/activate
(venv)17:39 ~/dbtest $ pip install flask flask-migrate
...
(venv)17:42 ~/dbtest $ vi dbtest.py
... (entered flask-migrate example code, see below)
(venv)17:47 ~/dbtest $ python dbtest.py 
usage: dbtest.py [-?] {shell,db,runserver} ...

positional arguments:
  {shell,db,runserver}
    shell               Runs a Python shell inside Flask application context.
    db                  Perform database migrations
    runserver           Runs the Flask development server i.e. app.run()

optional arguments:
  -?, --help            show this help message and exit
(venv)17:47 ~/dbtest $ python dbtest.py db init                                                                                                                                                                                             
  Creating directory /home/miguelgrinberg/dbtest/migrations ... done
  Creating directory /home/miguelgrinberg/dbtest/migrations/versions ... done
  Generating /home/miguelgrinberg/dbtest/migrations/README ... done
  Generating /home/miguelgrinberg/dbtest/migrations/alembic.ini ... done
  Generating /home/miguelgrinberg/dbtest/migrations/env.py ... done
  Generating /home/miguelgrinberg/dbtest/migrations/script.py.mako ... done
  Generating /home/miguelgrinberg/dbtest/migrations/env.pyc ... done
  Please edit configuration/connection/logging settings in '/home/miguelgrinberg/dbtest/migrations/alembic.ini' before proceeding.
(venv)17:54 ~/dbtest $ python dbtest.py db migrate                                                                                                                                                                                          
INFO  [alembic.migration] Context impl SQLiteImpl.
INFO  [alembic.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'user'
  Generating /home/miguelgrinberg/dbtest/migrations/versions/1c4aa671e23a_.py ... done
(venv)17:54 ~/dbtest $ python dbtest.py db upgrade                                                                                                                                                                                          
INFO  [alembic.migration] Context impl SQLiteImpl.
INFO  [alembic.migration] Will assume non-transactional DDL.
INFO  [alembic.migration] Running upgrade None -> 1c4aa671e23a, empty message
(venv)17:55 ~/dbtest $ ls -l
total 8
-rw-r--r-- 1 miguelgrinberg registered_users 3072 Sep 28  2014 app.db
-rwxrwxr-x 1 miguelgrinberg registered_users  511 Sep 28 17:48 dbtest.py
drwxrwxr-x 3 miguelgrinberg registered_users  100 Sep 28 17:55 migrations
drwxrwxr-x 6 miguelgrinberg registered_users   52 Sep 28 17:41 venv
我用来测试这一点的示例应用程序如下:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

class User(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(128))

if __name__ == '__main__':
    manager.run()

您是否已经创建了迁移存储库?还是数据库

所以我的部分问题是愚蠢的。如文档中所述,您可以简单地使用pip安装--user flask migrate来获取所需的扩展。当您尝试db initNo错误时,会出现什么错误。但是也没有生成迁移脚本。嗨,Miguel。因为我还没有在开发环境中生成迁移脚本(我使用pythonanywhere作为开发环境),所以我不清楚源代码管理是否是迁移的绝对要求(或者仅仅是良好实践)。也许我读O'Reilly的书读得太快了,在这里我所说的“源代码控制”是指将迁移文件和源代码放在一起。我假设您将应用程序部署到pythonanywhere,而不是直接在那里开发。让我在set_main_option self.File_config.set(self.config_ini_section,name,value)文件/usr/lib/python2.7/ConfigParser.py第753行set ConfigParser.set(self,section,option,value)文件/usr/lib/python2.7/ConfigParser.py中的我的答案文件“/usr/local/lib/python2.7/ConfigParser.py”中添加其他想法,第396行,在set-raise NoSectionError(section)ConfigParser中。NoSectionError:没有一节:“alembic”我还没有尝试过您设置venv的方法(但可能应该)。虽然alembic确实安装了,所以可能有一个快速的配置修复程序?@PeterCotton:看起来alembic没有找到配置文件。使用Flask Migrate时,配置文件不在默认位置,我将其放在
migrations
目录中,而Alembic默认将其放在一个目录上。请确保您没有将直接Alembic与Flask Migrate混用,可能这就是断开连接的地方。
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

class User(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(128))

if __name__ == '__main__':
    manager.run()