Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 莫名其妙地访问SQLAlchemy类字段并修复';对象不可下标';错误_Python_Flask_Sqlalchemy_Jinja2_Flask Sqlalchemy - Fatal编程技术网

Python 莫名其妙地访问SQLAlchemy类字段并修复';对象不可下标';错误

Python 莫名其妙地访问SQLAlchemy类字段并修复';对象不可下标';错误,python,flask,sqlalchemy,jinja2,flask-sqlalchemy,Python,Flask,Sqlalchemy,Jinja2,Flask Sqlalchemy,我正在使用SQLAlchemy模型开发我的第一个Flask应用程序,我有大约10个表示数据库表的类,这些类有表示列的字段 现在,在我的app.py中,我试图从数据库中选择数据,并使其具有字典列表的形式(一个字典代表一行): [{'column\u name1':'data1','column\u name2':'data2',…},{'column\u name1':'data3','column\u name2':'data4',…},…},…] 这是我想到的,但它不起作用: column\u

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

现在,在我的
app.py
中,我试图从数据库中选择数据,并使其具有字典列表的形式(一个字典代表一行):

[{'column\u name1':'data1','column\u name2':'data2',…},{'column\u name1':'data3','column\u name2':'data4',…},…},…]

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

column\u names=table.\u table\u.columns.keys()#获取列名称
records=table.query.whooshee_search(短语).all()#获取表记录
数据=[]
记录中的记录:
行={}
对于列名称中的列名称:
行[列名称]=记录[列名称]
DATA.append(行)
先前被指定为一个类,然后
列名称
是一个字符串列表,这些字符串是在该类中定义的列的名称<代码>记录是表示选定行(包含
短语
)的
类对象的列表。我检查了在
html
中显示结果是否正常,并返回所需返回的内容

但是,我希望将它们作为一个动态创建的字典(这样我就不必为每个可能的
值指定列名,而是使用
列名
)。行[column\u name]=记录[column\u name]似乎是问题所在-我发现了错误

TypeError:“用户”对象不可订阅


其中,
用户
是其中一个类(表的当前值)<代码>行[column\u name]=记录。column\u name是我的另一个(愚蠢的)方法,当然也不起作用。最后要提到的是,
{{record[column\u name]}
是我在
html
中显示结果时使用的
语法,使用
Flask-SQLAlchemy
定义的模型默认情况下不包含
\u-getitem\uuuuuuuuuuu(self,key)
方法,因此您不能执行
表[“some\u-key”

一种方法是在模型定义中显式定义
\uuu getitem\uuu(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
资料来源:


  • 所以这个
    \uuu getitem\uuuu(self,key)
    方法需要为每个类定义一次,或者为每个类字段单独定义一次?好的,我在我的项目中尝试了一下,它完全按照我希望的方式工作,非常感谢@θ您需要在您拥有的每个模型上定义此
    \uuuu getitem\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。也许试着做点像这样的事