我对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)中有数据,但为什么没有按需获取?
请帮忙!
答案 0 :(得分:0)
最终把自己弄清楚了。我们需要在关系中定义lazy='dynamic'
。