Ошибка Peewee на model.create() [Прокси]

Привет. Когда я пытаюсь создать новую запись в модели, я получаю

AttributeError: у объекта 'dict' нет атрибута 'compiler'

Возможно, что я получаю эту ошибку, потому что использую класс Proxy, но не могу найти ошибку в моем коде.

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)

До того, как я начал использовать класс Proxy, все работало как шарм.

1 ответ

Решение

Кажется, что я прохожу dict

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

db.initialize()

вместо строкового имени базы данных

DATABASE_INFO = 'test.db'
DATABASE = peewee.SqliteDatabase(DATABASE_INFO)
db.initialize(DATABASE)
Другие вопросы по тегам