在查询除手动添加的列之外的所有列时,避免sqlalchemy中没有此类列错误

2024-09-30 14:31:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个现有的sqlite3表,它是在没有主键的情况下创建的。我正在使用automap自动生成类。为了让automap正常工作,正如它期望主键一样,我手动添加了一个主键列:

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

现在,每当我试图查询所有列时,我都会收到一个错误,抱怨缺少id。我不希望每次查询表时都指定列,这将在以后显示数据时完成

有没有一种方法可以在不明确提及所有列的情况下绕过这个问题?我尝试了延迟和延迟选项,但没有成功

向如下列添加延迟:deferred(db.Column('id', db.Integer, primary_key=True))刚刚导致错误:

sqlalchemy.exc.ArgumentError: 'SchemaItem' object, such as a 'Column' or a 'Constraint' expected, got <ColumnProperty at 0x7fa96bc4c6d0; no key>

将“延迟”添加到查询选项也会导致相同的缺少id错误:

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

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: appuser.id

错误发生在for行中,因此我甚至无法打印出单独的属性,如:print(row.app, row.username)


Tags: keyidtruedb错误情况columninteger