Python+;SqlAlchemy';初始';使用单表继承
有炼金术方面的问题 我已经定义了我的数据库,相关部分如下Python+;SqlAlchemy';初始';使用单表继承,python,inheritance,sqlalchemy,Python,Inheritance,Sqlalchemy,有炼金术方面的问题 我已经定义了我的数据库,相关部分如下 class Person(Base): __tablename__ = 'PERSON' # id = Column(Integer, primary_key=True) person_type = Column(String(32), nullable=False) name = Column(String(50)) address = Column(String(120)) ph
class Person(Base):
__tablename__ = 'PERSON'
#
id = Column(Integer, primary_key=True)
person_type = Column(String(32), nullable=False)
name = Column(String(50))
address = Column(String(120))
phonenum = Column(String(20))
__mapper_args__ = {'polymorphic_on':person_type}
#
class Student(Person):
__mapper_args__ = {'polymorphic_identity': 'Student'}
dob = Column(Date)
我还有“Person”的其他子类。我对“init”的外观有问题。我最后一次尝试是
对于“人”
def __init__(self, a_name, a_address, a_phonenum, a_person_type = None):
self.name = a_name
self.address = a_address
self.phonenum = a_phonenum
而对于“学生”
def __init__ (self, a_name, a_address,a_phonenum, a_dob=None, a_stud_caregiver_id=None, a_person_type = 'Student'):
self.name = a_name
self.address = a_address
self.phonenum = a_phonenum
self.dob = a_dob
self.stud_caregiver_id = a_stud_caregiver_id
self.person_type = a_person_type
- 但是,虽然这创建了数据库,但当我开始“初始化”我的学生时,我得到的信息是
我显然做了一些愚蠢的事情,但是什么?谢谢!一般来说,你想调用基类的init(或者使用
super
)。例如Student.\uu init(self,require,args)
。我不知道sqlalchemy
是否是这样,但这是相当标准的。通常情况下,您不需要编写具有基本功能的\uuuuu init\uuuuu
,因为sqlalchemy已经提供了一个仅用于关键字参数的构造函数,该构造函数只分配给给定的属性。如果需要进一步的逻辑,请实现首先,然后(按照@mgilson的建议)添加对父构造函数的调用:Base.\uuuu init\uuuu(self,**kwargs)
。我能够用这些模型(包括给定的构造函数)创建一个数据库没有任何问题。你能给我们一个完整的python脚本,我们可以运行它来复制问题吗?谢谢大家的评论。我留下了INIT方法,因为我(还)不知道是否手工添加person_类型。Mark-我可以创建数据库好的,我只是不能用INIT加载它(是我的还是自动的)。最近的尝试是…>>>>新学生=学生(“约翰·布朗”,“1号大街”,“09 123 4567”),这让我得到了…回溯(最近一次调用):文件“”,第1行,在新学生=学生(“约翰·布朗”,“1号大街”,“09 123 4567”)类型错误:uuu init_uuuu()接受1个位置参数,但给出了4个位置参数