加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读