У меня есть таблица:
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
-derived:
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
может реализовать интерфейс и отобразить таблицу:
class WindowsFile(File, Base):
__tablename__ = 'windows_files'
id = Column(Integer, primary_key=True)
path = Column('filepath', String(260))
modified = Column('timestamp', DateTime)