我尝试使用SQLAlchemy
创建复合主键但是在添加数据时,它告诉我列不是唯一的,但作为一对,我确定他们是。
我的语法有问题吗?
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
import dataset
Base = declarative_base()
class Work(Base):
__tablename__ = 'Work'
id = Column(String(25),primary_key=True)
user = Column(String(10),primary_key=False)
date = Column(Integer, primary_key=False)
time = Column(Integer, primary_key=False)
ticket = Column(String(10), primary_key=True)
updated = Column(Integer, primary_key=False)
timestamp = Column(Integer, primary_key=False)
engine = create_engine('sqlite:///work_items.db', pool_recycle=3600)
Base.metadata.create_all(engine)
我已将id
和ticket
列定义为主键True
,这是我应该根据文档执行的操作 - 我只是似乎无法弄清楚造成这个问题的原因。
我知道我可以简单地将id
列定义为由id
+ ticket
的串联组成的字符串,但我认为复合主键功能会更好因为这是该功能的用途!
编辑:有人建议,关于在复合主键上定义外键约束的另一个问题可以作为这个问题的答案。但是,它没有:我的数据库只有一个表,因此没有外键关系。尽管如此,我仍然遇到一个错误:
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) columns id, ticket are not unique
EDIT2:这是我遇到的错误:
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) columns id, ticket are not unique
[SQL: u'INSERT INTO "Work" (id, user, date, time, ticket, updated, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?)']
[parameters: (u'108-4900', u'kiba', u'1451390400000', u'30', u'S-1527', u'1452863269208', 1458724496050.0)]
事情就是这样:只有一个ticket
有这个名字,ticket
本身只有一个id
...所以我&#39我真的在这里摸不着头脑
EDIT3:
try:
table['Work'].insert(dict(user=work_item.authorLogin,
date=work_item.date,
time=work_item.duration,
id=work_item.id,
ticket=issue.id,
updated=issue.updated,
timestamp=time.time()*1000.0))
except exc.SQLAlchemyError:
print 'error'
print work_item.authorLogin
print work_item.date
print work_item.duration
print work_item.id
print issue.id
print issue.updated