首页 > 解决方案 > 按字段名称访问 sqlalchemy 查询中的字段

问题描述

我有一个突然不再工作的脚本。我同时升级了 sqlalchemy 和 pg8000,只进行了小幅升级,所以我不完全确定哪一个是罪魁祸首。

我有一个对外部 Postgres 数据库的查询,并将结果集重新插入到同样是 Postgres 的 Heroku 数据库中。我可以连接到外部数据库并对其进行查询,但是 Python 在尝试按字段名称访问特定字段时返回错误。但是,我可以按位置访问字段:

for row in db.query(DATABASE_QUERY):
    print(type(row))
    # <class 'records.Record'>

    print(row)
    # <Record {"item_id": 12345, "item_name": "7.Subject.Class", "active": true, "is_deleted": false}
    
    print(row[0])
    # 12345
    
    print(row.item_name) # print(row['item_name'])
    # Error thrown

使用任一语法在最后一行引发错误。完整的堆栈跟踪是:

Traceback (most recent call last):
  File "app_dir/manage.py", line 14, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Users\user\Documents\Github\django-app\venv-dev\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "C:\Users\user\Documents\Github\django-app\venv-dev\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\user\Documents\Github\django-app\venv-dev\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\user\Documents\Github\django-app\venv-dev\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "C:\Users\user\Documents\Github\django-app\app_dir\apps\etl\management\commands\load.py", line 118, in handle
    step.load(period=period)
  File "C:\Users\user\Documents\Github\django-app\app_dir\apps\etl\models\job.py", line 89, in load
    match_status = self.domain_source.load(*args, **kwargs)
  File "C:\Users\user\Documents\Github\django-app\app_dir\apps\etl\models\domain.py", line 90, in load
    return self.load_profile.load(period=period, data=data, **kwargs)
  File "C:\Users\user\Documents\Github\django-app\app_dir\apps\etl\models\load_source.py", line 107, in load
    print(row.item_name)
  File "C:\Users\user\Documents\Github\django-app\venv-dev\lib\site-packages\records.py", line 61, in __getattr__
    return self[key]
  File "C:\Users\user\Documents\Github\django-app\venv-dev\lib\site-packages\records.py", line 54, in __getitem__
    i = self.keys().index(key)
AttributeError: 'RMKeyView' object has no attribute 'index'

如何按字段名称访问行的数据?或者是否有可靠的方法来访问该行的字段?

标签: pythondjangosqlalchemypg8000

解决方案


推荐阅读