Flask + Peewee错误AttributeError:'Flask'对象没有属性'compiler'

时间:2018-01-28 23:05:03

标签: python-3.x flask peewee

我在做什么? 我一直在学习Flask教程(https://blog.miguelgrinberg.com/),因为它使用了SQLAlchemy而且我想使用Peewee(我在另一个项目中使用它,并且已经很好地使用它),因此我坚持使用ORM部分

Noob有问题 在配置Peewee并定义BaseModel并在User模型中实现它之后,我尝试进行查询并改为出现此错误:

File "/home/atrevino/.local/share/virtualenvs/comparteme-qStpFUrM/lib/python3.6/site-packages/peewee.py", line 2932, in compiler
return self.database.compiler()   
AttributeError: 'Flask' object has no attribute 'compiler' 

不确定这是否与我的数据库配置有关,但是我能够获得MySQLDatabase对象,这使我认为它正在与DB正确连接。

每当我尝试使用Peewee的模型时,都会显示上述错误,例如User.get(User.id == 1)User.create(username='Name')

这是我的测试应用和环境配置

./config.py

import os                            

class Config(object):
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-know'
    DATABASE = {
        'name': 'comparteme',                        
        'engine': 'peewee.MySQLDatabase',            
        'user': 'root',
        'password': 'whatever',                
        'host': os.environ.get('DATABASE_URL') or 'mysql://root@localhost:3306'
    }

comparteme/__init__.py

import peewee

from flask import Flask
from config import Config

app = Flask(__name__)
app.config.from_object(Config)

db = peewee.MySQLDatabase(app).database

from comparteme import routes

comparteme/models/base_model.py

import peewee
from comparteme import db


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


class User(BaseModel):
    username = peewee.CharField(unique=True)

我从烧瓶路线呼叫所有这些:

comparteme/routes.py

from comparteme import app 
from comparteme.models.base_model import User


@app.route('/')
@app.route('/index')
def index():
    User.create(username='Alan')
    return 'returning any string'

为了能够测试我在我的根目录中有一个test.py,我使用export FLASK_APP=test.py添加到FLASK_APP环境变量。

./test.py

from comparteme import app

之后,我只是定期flask run并使用http://127.0.0.1:5000/打开浏览器并收到错误。

这是配置Peewee的正确方法吗?

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

我觉得你很困惑,你的问题清楚表明你没有花时间阅读documentation。也许需要花几分钟时间阅读文档,然后发布像这样无知的垃圾。

完成后,您可以尝试这样做:

from peewee import *
from playhouse.flask_utils import FlaskDB

# In your example you'll probably change this to mysql://something
DATABASE = 'postgresql://postgres:password@localhost:5432/my_database'

app = Flask(__name__)
app.config.from_object(__name__)

db_wrapper = FlaskDB(app)

class User(db_wrapper.Model):
    username = CharField(unique=True)

class Tweet(db_wrapper.Model):
    user = ForeignKeyField(User, backref='tweets')
    content = TextField()
    timestamp = DateTimeField(default=datetime.datetime.now)