想知道sqlalchemy中的 Base 是否继承自对象。详见下文。
目前正在使用Python3和SQLAlchemy 0.8
在我的项目中,我用(对象)声明了一个新的样式类,我继续使用“Property”来定义我的类中的属性。该课程正常“下面的示例代码”
class LoadFile(object):
def _set_year(self, value):
'''set the year'''
value = value[6:10]
if valid_integer(value) != True:
raise Exception ("File Name Error: The year value should be a numeral")
self._year = value
def _get_year(self):
'''get the year'''
return self._year
year = property(_get_year, _set_year)
随着我的项目不断增长,我已经开始使用SQLAlchemy并运行该类,它抛出了错误
class LoadFile(object):
__tablename__ = "load_file"
id = Column(Integer(10), primary_key = True)
file_name = Column(String(250), nullable = False, unique = True)
file_path = Column(String(500), nullable = False)
date_submitted = Column(DateTime, nullable = False)
submitted_by = Column(String, nullable = False)
def _set_year(self, value):
'''set the year'''
value = value[6:10]
if valid_integer(value) != True:
raise Exception ("File Name Error: The year value should be a numeral")
self._year = value
def _get_year(self):
'''get the year'''
return self._year
year = property(_get_year, _set_year)
它抛出的错误是:
AttributeError: 'LoadFile' object has no attribute '_sa_instance_state'
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/orm/session.py", line 1369, in add
raise exc.UnmappedInstanceError(instance)
sqlalchemy.orm.exc.UnmappedInstanceError: Class '__main__.LoadFile' is not mapped
所以我注意到我没有继承“ Base ”所以我把课程改为:
class LoadFile(Base):
有了这个,sqlalchemy工作正常,表格成功创建。但是,我现在注意到我在日食中发出警告
Use of "property" on an old style class"
所以我想知道, Base 是否继承自Object?以为我早些时候读过它确实如此。另外,为什么我现在得到这个“警告”。我知道我可以忽略它,但只是想找出确切的原因,也许是如何纠正它。
感谢。
更新
我开始使用装饰器,如下所示。这样,上面的“警告”就消失了
@property
def year(self):
'''get the year'''
return self._year
@year.setter
def year(self, value):
'''set the year'''
if valid_integer(value) != True:
raise Exception ("File Name Error: The year value should be a numeral")
self._year = value
这样可以处理警告。但是我仍然不明白为什么前面的方法有警告......而且,我不太确定哪个是使用装饰器或前一个装置的最佳方法。
答案 0 :(得分:0)
Python 3中不存在旧式类,因此警告是假的。检查Eclipse中的Preferences和Project Properties,也许有对Python 2.x的引用。