如何使用SqlAlchemy ORM更改列标签

2024-05-16 22:53:43 发布

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

我有MS Access DB文件(.accdb),文件内存储了个人照片作为附件。在表构造函数中,我只看到一个字段“photos”,类型为“Attachment”。实际上,有三个隐藏字段的名称:photos.FileData、photos.FileName、photos.FileType。为了解析这些字段,我创建了以下类:

class Person:
    __tablename__ = 'persons'
    name = Column(String(255), name='name')
    photos_data = Column(String, name='photos.FileData', quote=False)
    ....

如果我尝试同时获取Person的所有属性,如下所示:

persons = session.query(Person)

以下生成的SQL语句中出现错误:

SELECT ... [persons].photos.FileData AS persons_photos.FileData ...;

正如您所看到的,alias中存在点号,这会引发ODBC错误。我可以避免将FileData请求为单独值的行为:

persons = session.query(Person.photos_data.label('photos_data'))

或者我可以使用没有别名的原始SQL。但这不是我需要的正常ORM方式,因为每次请求DB后,我都必须手动构造Persons对象

是否可以在声明期间将自己的标签设置为列,或者甚至禁用所选列的标签

我看到了this great answer,但这似乎不适用于我。以下语句无法正常工作:

photos_data = Column(String, name='photos.FileData', quote=False).label('photos_data')

Tags: 文件namefalsedbsqldatastringsession