2017-08-20 27 views
0

我正在嘗試使用Peewee和Flask,但我不明白爲什麼我的數據庫連接不起作用。Peewee和Flask:'數據庫'對象沒有任何屬性'commit_select'

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' 

我生成models.py與pwiz。

如果我嘗試在交互式控制檯上使用它,我會在標題上看到錯誤。如果我將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的網站上覆制過來的。

+0

聽起來像是你的配置不被正確處理。我想我已經找到了罪魁禍首 - >'app.config.from_object('config.Configuration')'。我想你的意思是通過該方法配置對象而不是字符串。 –

+0

@WyattIsrael謝謝,但我確實檢查過兩次,這是正確的。我必須傳遞一個字符串。我甚至試圖犯一個錯字,看它是否被加載。當我使用字符串時它確實加載了。我不確定發生了什麼。 – maugch

+0

錯@WyattIsrael - 請參閱我的評論。 – coleifer

回答

1

您正在使用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 
+0

它的工作原理!感謝您的幫助和感謝peewee。 – maugch

相關問題