我用烧瓶试了两天peewee,但直到现在我都失败了。代码如下:
import click
from flask import Flask
from flask.cli import FlaskGroup
from playhouse.flask_utils import FlaskDB
from models import *
from config import config
flask_db = FlaskDB()
def create_app(config_name):
application = Flask(__name__)
application.config.from_object(config[config_name])
flask_db.init_app(application)
flask_db.connect_db()
flask_db.database.create_tables([User])
flask_db.database.close()
@application.route('/')
def index():
return "hello world!"
return application
def create_cli_app(info):
return create_app("develop")
@click.group(cls=FlaskGroup, create_app=create_cli_app)
def cli():
pass
@cli.command()
def initdb():
flask_db.connect_db()
flask_db.database.create_tables([User])
flask_db.database.close()
if __name__ == "__main__":
cli()
当我使用CLI:python manage.py运行它时,我收到以下错误:
(venv)➜/ Users / yw / Documents / web git :( master)✗pmanage.py run 回溯(最近一次呼叫最后):文件" manage.py",第46行,in cli()File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/click/core.py", 第716行,通话 return self.main(* args,** kwargs)File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/flask/cli.py", 第345行,主要 返回AppGroup.main(self,* args,** kwargs)File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/click/core.py", 第696行,主要 rv = self.invoke(ctx)File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/click/core.py", 第1060行,在调用中 return _process_result(sub_ctx.command.invoke(sub_ctx))File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/click/core.py", 第889行,在调用中 return ctx.invoke(self.callback,** ctx.params)File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/click/core.py", 第534行,在调用中 返回回调(* args,** kwargs)文件" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/click/decorators.py", 第64行,在new_func中 return ctx.invoke(f,obj,* args [1:],** kwargs)File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/click/core。 PY&#34 ;, 第534行,在调用中 返回回调(* args,** kwargs)文件" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/flask/cli.py", 第388行,在run_command中 app = DispatchingApp(info.load_app,use_eager_loading = eager_loading)文件 " /Users/yw/Documents/web/venv/lib/python3.4/site-packages/flask/cli.py" ;, 第124行,在 init 中 self._load_unlocked()File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/flask/cli.py", 第148行,在_load_unlocked中 self._app = rv = self.loader()File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/flask/cli.py", 第201行,在load_app中 rv = self.create_app(self)文件" manage.py",第30行,在create_cli_app中 在create_app中返回create_app(" develop")文件" manage.py",第19行 flask_db.database.create_tables([User])File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/peewee.py", 第3765行,在create_tables中 create_model_tables(models,fail_silently = safe)File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/peewee.py", 第5175行,在create_model_tables中 m.create_table(** create_table_kwargs)File" /Users/yw/Documents/web/venv/lib/python3.4/site-packages/peewee.py", 第4845行,在create_table中 如果db.sequences和pk不是False并且pk.sequence:AttributeError:' FlaskDB'对象没有属性'序列'
实际上,我只想使用flask.cli工具启动数据库。如您所见,如果我使用命令“python manage.py initdb”,我只能得到与上面相同的错误输出。
那么"' FlaskDB'是什么意思?对象没有属性'序列'"?我该怎么办?
感谢您的帮助!
答案 0 :(得分:0)
您的User
模型似乎没有正确的数据库。
使用FlaskDB,您的User
模型应该继承FlaskDB().Model
而不是定义class Meta: database = database
。
database = FlaskDB()
class User(database.Model):
pass