gpt4 book ai didi

python - 具有多个主键的 SQLAlchemy 不会自动设置任何

转载 作者:太空狗 更新时间:2023-10-30 02:01:10 25 4
gpt4 key购买 nike

我有一个简单的表格:

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__ 你可能想要调用 super 构造函数:

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

关于python - 具有多个主键的 SQLAlchemy 不会自动设置任何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com