我正在使用 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
是一个字符串列表,这些字符串是此类中定义的列的名称。 records
是 table
的列表代表选定行的类对象(包含 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
来源:
关于python - 隐式访问SQLAlchemy类字段并修复 'object is not subscriptable'错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59011757/