SQLAlchemy复合主键

时间:2016-03-23 10:03:44

标签: python database python-2.7 sqlite sqlalchemy

我尝试使用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)

我已将idticket列定义为主键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

0 个答案:

没有答案