2014-09-19 6 views
1

나는 우수한 라이브러리 믹서를 사용하여 플라스크 응용 프로그램을 테스트하기 위해 일부 비품을 생성하려고합니다. 난 이미 장고 프로젝트에서 사용하고 완벽하게 일했지만 플라스크 + sqlalchemy 상관없이 내가 null 값을받습니다.파이썬 믹서에서 null 값 받기

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) 

동일한 null 값을 반환합니다.

두 경우 모두 자동 생성 ID를 반환합니다. 그리고 데이터베이스에 저장되지만 모든 필드에는 Null이 있습니다.

이유는 무엇입니까?

감사

+0

[Flask-SQLAlchemy 지침] (https://github.com/klen/mixer#flask-flask-sqlalchemy)을 따랐습니까? – dirn

+0

예. 첫 번째 시도는 설명서의 지침입니다. 두 번째는 원인을 찾아 내려고하는 것입니다. 내가 뭐 놓친 거 없니? – cllamach

+0

Flask-SQLAlchemy에 대한 섹션과'__init__'에 대한 인수가 있습니다 (https://github.com/klen/mixer#user-content-support-for-flask-sqlalchemy-models-that-have-__init__- 인수). 'Users'는'__init__' 메서드를 사용하여 값을 할당합니까? – dirn

답변

4

는 null이 될 수있는 필드에 대한 데이터를 생성하지 않는 간단한 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 

을 또는 당신이 널 (NULL)을 유지하려는 경우가 발생하고 싶은 필드 믹서 알려주기 : KLEN에

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] 

감사의 믹서 저자 : providing the solution.

+0

신난다. 실제로 nullable = False를 입력하지 않았습니다. 장고에서 어떻게 작동하는지 설명 하겠지만 기본 동작은 nullable = False입니다. – cllamach

+1

고마워요 @doobeh하지만 두 번째 경우에 대해서는 조금 더 있습니다 강제로 null 값을 허용하는 데 믹서 작성기를 사용할 필요는 없습니다. Mixer에는 작업을 수행하는 마법 속성 'mixer.R'이 있습니다. 'user = mixer .blend (사용자, username = mixer.R, email = mixer.R)' – klen