python - 隐式访问SQLAlchemy类字段并修复 'object is not subscriptable'错误

标签 python flask sqlalchemy jinja2 flask-sqlalchemy

我正在使用 SQLAlchemy 模型开发我的第一个 Flask 应用程序,我有大约 10 个表示数据库表的类,并且这些类具有表示列的字段。

现在在我的 app.py我正在尝试从数据库中选择数据并使其具有字典列表的形式(一个字典代表一行):
[{'column_name1': 'data1', 'column_name2': 'data2', ...}, {'column_name1': 'data3', 'column_name2': 'data4', ...}, ...] .

这是我想出的,但它不起作用:

column_names = table.__table__.columns.keys()  # get columns names
records = table.query.whooshee_search(phrase).all()  # get table records

DATA = []

for record in records:
    row = {}
    for column_name in column_names:
        row[column_name] = record[column_name]
    DATA.append(row)

table早先被分配了一个类,然后 column_names是一个字符串列表,这些字符串是此类中定义的列的名称。 recordstable 的列表代表选定行的类对象(包含 phrase )。我检查了在 html 中显示结果这工作正常并返回应该返回的内容。

但是,我希望将它们作为动态创建的字典(这样我就不必为每个可能的 table 值指定列名,而是使用 column_names )。线路row[column_name] = record[column_name]似乎是问题 - 我得到了错误
TypeError: 'User' object is not subscriptable
哪里User是类之一( table 的当前值)。 row[column_name] = record.column_name是我的另一种(愚蠢的)方法,当然也不起作用。最后要提到的是 {{ record[column_name] }}Jinja2我在 html 中显示结果时使用的语法.

最佳答案

使用 Flask-SQLAlchemy定义的模型不包含 __getitem__(self, key)方法默认,因此你不能做 table["some_key"] .

一种方法是明确定义 __getitem__(self, key)模型定义中的方法。这是它的一个工作示例。

class User:
    def __init__(self):
        self.member = 0

    def __getitem__(self, field):
        return self.__dict__[field]

user = User()
print(user.member) # 0
print(user["member"]) # 0

来源:
  • https://flask-sqlalchemy.palletsprojects.com/en/2.x/api/?highlight=model#models
  • https://docs.python.org/3/reference/datamodel.html#object.getitem
  • 关于python - 隐式访问SQLAlchemy类字段并修复 'object is not subscriptable'错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59011757/

    相关文章:

    Python CSV 编写器用额外的空格引用字符串

    python - 修改 Pandas 中的时间戳以使索引唯一

    python - 从源安装python得到了相同的系统python

    python - 使用 SWIG 为 C++ 类创建 python 包装器

    python - 在 SQLAlchemy 中加载连接列的子集

    python - SQLAlchemy - 从自动加载表的内部连接映射列的子集

    javascript - Twilio 客户端 Python 在 IOS 浏览器中不工作

    python - Flask 缓存设置方法抛出 KeyError?

    python - 如果socketIO实例是类成员变量,如何用flask-socketio修饰类函数?

    python - Flask sqlalchemy 接口(interface)错误