2014-09-19 49 views
1

我試圖生成一些燈具來測試Flask應用程序,使用excellente庫混音器。我已經在Django項目中使用它,並且完美地工作,但是在flask + sqlalchemy中,無論我做什麼,我都會收到空值。從Python混音器接收空值

from mixer.backend.flask import mixer 
from models import Users 
from myproj import app 

mixer.init_app(app) 

me.blend(Users) 

返回null。

我也嘗試直接實例化應用程序。

from mixer.backend.flask import Mixer 
from models import Users 
from myproj import app 

mixer = Mixer(app=app) 

me = mixer.blend(Users) 

返回相同的空值。

這兩種情況都會返回自動生成的ID。並保存到數據庫中,但所有字段都爲空。

任何想法爲什麼?

感謝

+0

你是否按照[Flask-SQLAlchemy說明](https://github.com/klen/mixer#flask-flask-sqlalchemy)? – dirn 2014-09-19 15:41:32

+0

是的。第一次嘗試正是文檔中的說明。其次是我試圖找出原因。我錯過了什麼? – cllamach 2014-09-19 15:48:55

+0

[有關Flask-SQLAlchemy的具體內容和'__init__'參數](https://github.com/klen/mixer#user-content-support-for-flask-sqlalchemy-models-that-have-__init__-參數)。用戶是否使用'__init__'方法來分配值? – dirn 2014-09-19 15:50:54

回答

4

原來這是一個簡單的answer--混頻器領域,可以爲空不產生數據。因此,要麼指定在你的模型,比如這個作品:

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
from mixer.backend.flask import mixer 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' 

db = SQLAlchemy(app) 
mixer.init_app(app) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(80), unique=True, nullable=False) 
    email = db.Column(db.String(120), unique=True, nullable=False) 

    def __repr__(self): 
     return '<User %r>' % self.username 

if __name__ == '__main__': 
    with app.app_context(): 
     db.create_all() 
     user = mixer.blend(User) 
     print user.id, user.username 

     # Prints: 1 collins1995 

或者告訴調音臺你希望它產生,如果你想保持他們爲空的,哪些字段:

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
from mixer import fakers as f 
from mixer.backend.flask import mixer 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' 

db = SQLAlchemy(app) 
mixer.init_app(app) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(80), unique=True) 
    email = db.Column(db.String(120), unique=True) 

    def __repr__(self): 
     return '<User %r>' % self.username 

if __name__ == '__main__': 
    with app.app_context(): 
     db.create_all() 
     user = mixer.blend(User, username=f.get_username(), email=f.get_email()) 
     print user.id, user.username, user.email 

     # Prints: 1 lover_boots [email protected] 

由於klen時,作者Mixer爲providing the solution

+0

太棒了,我實際上並沒有把nullable = False放在任何字段上。這將解釋如何在Django中使用它,默認行爲是nullable = False。 – cllamach 2014-09-20 02:49:29

+1

謝謝@doobeh,但是第二種情況還有一點點: 沒有必要使用混合器fakers強制爲空值,Mixer有一個魔術屬性'mixer.R'來完成這個工作:'user = mixer .blend(用戶,用戶名= mixer.R,電子郵件= mixer.R)' – klen 2014-09-20 17:05:12