python - 在查询除手动添加的列之外的所有列时,避免在 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)
解决方案
推荐阅读
- angular6 - 无法在 ng2-smart-table 中获取保存数据事件
- r - 等价于 first./last。R中的SAS处理
- c++ - 在 qtextedit 中的文本之后绘制一个 qlabel
- java - Android Java 坏词过滤器
- nativescript - 在 TabView 中启用滑动
- c# - 我们如何在 VSTO ContactItem 上 MOQ UserProperties
- angular - Angular - 使用 web api 模拟实时的最佳方式
- javascript - Jasmine 错误:预期 false 为 true
- fiddler - Fiddler:无法在
- python - 当时间序列中的下一个值更大时过滤数据