Flask SQLAlchemy未返回预期结果

时间:2016-02-19 20:22:21

标签: flask-sqlalchemy

我对Flask很新,我无法让我的模型正常工作。我已经通过相当多的链接和教程来寻找这个答案,但未能连接点。所以我希望有人会在这里指出错误。

我的要求很简单:我的应用维护网站及其类别的表格,我目前正在尝试使用SQLAlchemy为我提供所有类别及其网站的列表。

以下是我的模特:

class Category(db.Model):
    __tablename__ = "categories"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, unique=True)
    websites = db.relationship('Website', backref='category')

class Website(db.Model):
    __tablename__ = "websites"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    category_id = db.Column(db.Integer, db.ForeignKey('categories.id'))
    url = db.Column(db.String(1000), nullable=False)
    class_name = db.Column(db.String(50), nullable=False)

以下是我如何使用这些:

categories = Category.query.all()

for cat in categories:
    print('*' * 20)
    print(cat.websites)
    print('*' * 20)
    print(dir(cat.websites))

这些打印陈述是因为cat.websites没有给我我想要的网站。这是其中一个循环过程的示例输出:

********************
[<models.Website object at 0x7f7cde94e7b8>]
********************
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_sa_adapter', '_sa_appender', '_sa_converter', '_sa_instrumented', '_sa_iterator', '_sa_remover', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

因此即使我在输出中有一个模型对象列表,它的dir()列表也没有显示我感兴趣的属性,即websites。更有趣的是,向函数添加print(cat.websites[0])会引发IndexError。为什么呢?

数据库(MySQL)中有数据,但为什么没有按需获取?

请帮忙!

1 个答案:

答案 0 :(得分:0)

最终把自己弄清楚了。我们需要在关系中定义lazy='dynamic'