首页 > 解决方案 > 在查询除手动添加的列之外的所有列时,避免在 sqlalchemy 中出现此类列错误

问题描述

我有一个现有的 sqlite3 表,它是在没有主键的情况下创建的。我正在使用 automap 来自动生成类。为了让自动映射工作,因为它需要一个主键,我手动添加了一个主键列:

    appuser = db.Table(
        'AppUser',
         metadata,
         db.Column('id', db.Integer, primary_key=True),
         extend_existing=True,
         autoload=True,
         autoload_with=engine
    )

现在,每当我尝试查询所有列时,都会收到一个错误,抱怨缺少 id。我宁愿不必在每次查询表时都指定列,这将在稍后呈现数据时完成。

有没有办法在不明确提及所有列的情况下解决这个问题?我尝试了 deferred 和 defer 选项,但没有成功。

像这样添加延迟到列:deferred(db.Column('id', db.Integer, primary_key=True))只是导致错误:

sqlalchemy.exc.ArgumentError:“SchemaItem”对象,例如“列”或“约束”,在 0x7fa96bc4c6d0 处获得 <ColumnProperty;没有钥匙>

并且在查询选项中添加 defer 也会导致相同的缺少 id 错误:

        userRecords = self.session.query(appuser).all()
        userRecords.options(defer('id'))
        for row in userRecords:
            print(row)

sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的列:appuser.id

错误发生在 for 行中,所以我什至不能像这样打印出单个属性:print(row.app, row.username)

标签: pythonsqlalchemy

解决方案


推荐阅读