我在做什么? 我一直在学习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的正确方法吗?
提前致谢!!!
答案 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)