2017-12-07 16 views
-1

こんにちは。私はモデルに新しいレコードを作成しようとしているときに 、私はプロキシクラスを使用しているため、このエラーを取得していますが、私のコードに間違いを見つけることができないことを、Peewee error on model.create()[Proxy]

AttributeError: 'dict' object has no attribute 'compiler'

可能になっています。

のinitの.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 

models.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) 

私がプロキシクラスを使用する前は、すべてが魅力的でした。

答えて

0

代わりのデータベースの文字列名

DATABASE_INFO = 'test.db' 
DATABASE = peewee.SqliteDatabase(DATABASE_INFO) 
db.initialize(DATABASE) 
)私は(db.initializeする辞書

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

を渡すこと、思えます