Skip to main content
 首页 » 编程设计

python之从 python 混合器接收空值

2025年05月04日15grandyang

我正在尝试使用 excellente 库混合器生成一些装置来测试 Flask 应用程序。我已经在 Django 项目中使用它并且工作得很好,但是在 flask+sqlalchemy 上无论我做什么我都会收到空值。

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。并保存到数据库中,但所有字段都为空。

知道为什么吗?

谢谢

请您参考如下方法:

原来这是一个简单的答案——Mixer 不会为可以为 null 的字段生成数据。因此,要么在您的模型中指定它,例如这有效:

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 

或者告诉 Mixer 你希望它生成哪些字段,如果你想让它们保持为空:

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 robinson1963@google.vn 

感谢 klen,Mixer 的作者 providing the solution .