gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:58:29 26 4
gpt4 key购买 nike

我正在使用 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com