-1

你好。当我尝试在模型中创建新记录时,我得到

AttributeError:“dict”对象没有属性“compiler”

可能,我收到此错误是因为使用 Proxy 类,但在我的代码中找不到错误。

初始化.py

from flask import Flask
from flask_peewee.db import Proxy
from flask_bootstrap import Bootstrap

from app.config import config_select

db = Proxy()
bootstrap = Bootstrap()

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config_select[config_name])
    config_select[config_name].init_app(app)

    db.initialize(config_select[config_name].DATABASE)
    bootstrap.init_app(app)

    #register blueprints
    from app.blueprint.main import main_bp as main_blueprint

    app.register_blueprint(main_blueprint)


    return app

模型.py

from peewee import *

from app import db



class BaseModel(Model):
    class Meta:
        database = db

class User(BaseModel):
    id = PrimaryKeyField()
    username = CharField(default='test', max_length=20)

    class Meta:
        db_table = 'users'





MODELS_LIST = [User]

数据库由管理器“generate_db_tables”命令创建

import os
from app import create_app


from flask_script import Manager, Shell

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)



def connect_db():
    from peewee import SqliteDatabase
    db_lite = SqliteDatabase(app.config['DATABASE']['name'])
    return db_lite

@manager.command
def generate_db_tables():
    from app.models.models import MODELS_LIST
    db_lite = connect_db()
    for model in MODELS_LIST:
        db_lite.create_table(model, safe=True)
    print("Db tables created")

和视图功能:

from flask import render_template, session, \
    redirect, url_for, current_app, flash, request, make_response

from . import main_bp
from .forms import NameForm
from app.models.models import User

@main_bp.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        User.create(username=form.name.data) # <<<< Here is error
        return url_for('.index')
    return render_template('index.html', form=form)

在我开始使用代理类之前,一切都像一个魅力。

4

1 回答 1

0

看来,我通过 dict

DATABASE = {
    'name': 'test.db',
    'engine': 'peewee.SqliteDatabase'
}

到 db.initialize()

而不是数据库的字符串名称

DATABASE_INFO = 'test.db'
DATABASE = peewee.SqliteDatabase(DATABASE_INFO)
db.initialize(DATABASE)
于 2017-12-07T20:16:38.043 回答