在Flask-SQLAlchemy中使用Mixer

4 投票
1 回答
668 浏览
提问于 2025-04-17 22:59

我正在尝试使用 mixer 来为一个使用 Flask 和 SQLAlchemy 的网站生成测试数据。

我在项目的根目录下创建了一个名为 generate_test_data.py 的文件,内容如下:

# -*- coding: utf-8 -*-

import app
from mixer.backend.flask import mixer
from models import *

def generate_test_data():
        user = mixer.blend(Users)

if __name__ == "__main__":
        generate_test_data()

然而,每次我运行这个文件时都会出现以下错误:

Traceback (most recent call last):
  File "generate_test_data.py", line 3, in <module>
    import app
ImportError: No module named app

我是在正确的虚拟环境下进行操作的。

更新

我的项目结构如下:

/
 - generate_test_data.py
 - app/
 -- __init__.py
 -- models.py

** 更新**

我的 __init__.py 文件内容:

# -*- coding: utf-8 -*-

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.uwsgi_websocket import GeventWebSocket
from config import REDIS_HOST, REDIS_PORT
import redis


app = Flask(__name__)
db = SQLAlchemy(app)
ws = GeventWebSocket(app)

POOL = redis.ConnectionPool(host=REDIS_HOST, port=REDIS_PORT, db=0)
redis = redis.Redis(connection_pool=POOL)

from app import views, models

1 个回答

1

我建议你重新整理一下你的项目结构,像这样:

myproject/
    generate_test_data.py
    __init__.py
    models.py

然后,在你的 generate_test_data.py 文件里,你可以直接这样做:

from myproject import app

这样做会更好,因为你避免了名字冲突。而且,你明确地导入了你需要的应用变量,这样更清楚。当然,你可以把“myproject”改成你喜欢的名字,但为了安全起见,不要把它命名为“app”。

撰写回答