Peewee和Flask:'Database'对象没有属性'commit_select'

时间:2017-08-20 12:15:52

标签: python flask peewee

我正在尝试将Peewee与Flask一起使用,但我不明白为什么我的数据库连接不起作用。

config.py

class Configuration(object):
DATABASE = {
    'name': 'test',
    'engine': 'peewee.MySQLDatabase',
    'user': 'root',
    'passwd': 'root'
}
DEBUG = True
SECRET_KEY = 'shhhh'

应用程序/的初始化的.py

from flask import Flask
from flask_peewee.db import Database
app = Flask(__name__)
app.config.from_object('config.Configuration') 
db = Database(app)
import views,models

应用程序/ models.py

from peewee import *
from . import db
database = db

class UnknownField(object):
    def __init__(self, *_, **__): pass
class BaseModel(Model):
    class Meta:
        database = database

class Tbcategory(BaseModel):
    insert_dt = DateTimeField()
    name = CharField()

    class Meta:
        db_table = 'tbcategory'

我用pwiz生成了models.py。

如果我尝试在交互式控制台上使用它,我会在标题上出现错误。如果我将models.py上的行从database = db更改为pwiz创建的原始行:

db = MySQLDatabase('test', **{'host': '127.0.0.1', 'password': 'root', 'user': 'root'})
一切正常。我找不到互联网上的一个例子。配置全部在应用程序中,或者在config.py文件中,但是使用sqlite或稍微不同的用法。 我应该停止使用flask_peewee中的Database()并直接使用MySQLDatabase吗?如何使用配置的外部文件? 请注意,我在一种方法上使用127.0.0.1,而在另一种方法上没有使用主机规范。我是从peewee-flask网站上复制的。

1 个答案:

答案 0 :(得分:0)

您正在使用Database包装器对象。要获得实际的Peewee数据库对象,请使用:

app.config.from_object('config.Configuration') 
db = Database(app)
database = db.database  # database is the actual peewee database obj.

在你的模特代码中:

from peewee import *
from . import database  # Import the actual peewee database