2017-01-08 4 views
2

Когда я запускаю следующий код, я ожидаю, что first_name и last_name будут составным первичным ключом, а идентификатор будет индексом автоинкремента для строки, но не выступать в качестве первичного ключа, так как информация в остальной части таблицы заключается в том, что мне нужно определить ее уникальность, а не заданный идентификатор.Использование SQLAlchemy ORM для непервичного ключа, уникальный, автоматически увеличивающий id

Base = declarative_base() 
Session = sessionmaker(bind=db) 
session = Session() 

class Person(Base): 
    __tablename__ = "people" 
    id = Column(Integer, index=True, unique=True, autoincrement=True, primary_key=False) 
    first_name = Column(String(30), primary_key=True) 
    last_name = Column(String(30), primary_key=True) 

if __name__ == "__main__": 
    Base.metadata.create_all(db) 
    session.add_all([ 
     Person(first_name="Winston", last_name="Moy"), 
     Person(first_name="Bill", last_name="Gates"), 
     Person(first_name="Steve", last_name="Jobs"), 
     Person(first_name="Quinten", last_name="Coldwater") 
    ]) 
    session.commit() 

Проблема Я рассматриваю результаты в DataGrip, я получаю следующую таблицу. Данные не находятся в добавленном порядке, а столбец id равен null, а не целое число с автоматическим увеличением, которое я ожидаю.

Должно быть ясным: Мой вопрос: Как я могу сделать индекс автоматического инкремента для ORM класса SQLAlchemy, который не является первичным ключом?

+0

Если вы не увеличиваете * нужно *, вы можете использовать UUID4s –

ответ

3

На момент написания этого вопроса SQLAlchemy 1.1 не поддерживает автоматическое приращение в поле непервичного ключа.

 Смежные вопросы

  • Нет связанных вопросов^_^