python – 具有多个主键的SQLAlchemy不会自动设置任何主键
发布时间:2020-12-20 11:13:10 所属栏目:Python 来源:网络整理
导读:我有一张简单的桌子: class test(Base): __tablename__ = 'test' id = Column(Integer,primary_key=True) title = Column(String) def __init__(self,title): self.title = title 使用此表时,会自动设置ID.我想添加另一个独特且有效的搜索字段,所以我添加了
我有一张简单的桌子:
class test(Base): __tablename__ = 'test' id = Column(Integer,primary_key=True) title = Column(String) def __init__(self,title): self.title = title 使用此表时,会自动设置ID.我想添加另一个独特且有效的搜索字段,所以我添加了字段: id2 = Column(String,primary_key=True) 并更新了构造函数: def __init__(self,id2,title): self.id2 = id2 self.title = title 现在,不再自动设置id,或者我得到错误: IntegrityError:(IntegrityError)test.id可能不是NULL u’INSERT INTO test(id2,title)VALUES(?,?)'[u’a’,u’b’] 有没有办法维护第二个主键而不删除第一个主键的自动增量行为? 解决方法
我这里几乎没有问题
1)你手工制作__init__的目的是什么?如果它只是你写的,你可以完全省略构造函数,因为SQLAlchemy机器为所有模型自动生成完全相同的构造函数.虽然如果你采取一些额外的操作,因此必须覆盖__init__,你可能想调用超级构造函数: def __init__(self,lalala,*args,**kwargs): # do something with lalala here... super(test,self).__init__(*args,**kwargs) # ...or here 2)一旦你有一个带有primary_key = True的字段,就会得到一个带有复合主键的模型.复合主键不会自动生成,因为这里存在歧义:后续键与以前的键有何不同? 我怀疑使用唯一索引列而不使用复合键可以实现您正在尝试的内容: class test(Base): __tablename__ = 'test' id = Column(Integer,primary_key=True) id2 = Column(String,index=True,unique=True) title = Column(String) # def __init__(self) is not necessary (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |