我有一张桌子:
CREATE TABLE `windows_files` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filepath` varchar(260) DEFAULT NULL,
`timestamp` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
我有一个基类:
class File:
path: str
modified: datetime.datetime
def delete(self):
os.remove(self.path)
我有一个declarative_base
派生的类:
Base = declarative_base()
class WindowsFile(File, Base):
__tablename__ = 'windows_files'
id = Column(Integer, primary_key=True)
filepath = Column(String(260))
timestamp = Column(DateTime)
问题是,WindowsFile
不是一个很好的File
:
>>> file = session.query(WindowsFile).first()
>>> ...
>>> file.delete()
Traceback (most recent call last):
File "<pyshell#34916>", line 1, in <module>
...
os.remove(self.path)
AttributeError: 'WindowsFile' object has no attribute 'path'
如何使WindowsFile
适合接口,隐藏其实现细节?我不能更改数据库,因为其他人正在使用它,我也不能更改File
的定义,因为windows_files
的列名非常特定于实现
通过将列的名称作为第一个参数传递给
Column
构造函数,可以将列与其属性名分开命名,这样WindowsFile
既可以实现接口,又可以反映表:相关问题 更多 >
编程相关推荐