Я предположил, что вы используете MySQL здесь, поэтому, если нет, дайте мне знать, и я удалю этот ответ.
Вы можете прочитать, что Майк Байер сказал об изменении порядка полей первичного ключа в MySQL здесь. И рациональное объяснение того, почему SQLAlchemy
ведет себя так, здесь.
Вы можете добиться того, чего хотите, используя PrimaryKeyConstraint
и отдельный UniqueConstraint
в поле id
. Например.:
class Gyroinfo(Base):
__tablename__ = 'GYROINFO'
id = Column(Integer, autoincrement=True, unique=True)
date = Column(DateTime)
__table_args__ = (
PrimaryKeyConstraint(date, id),
)
Что производит следующий sql:
CREATE TABLE `GYROINFO` (
id INTEGER NOT NULL AUTO_INCREMENT,
date DATETIME NOT NULL,
PRIMARY KEY (date, id),
UNIQUE (id)
)
Без дополнительных unique=True
в определении поля id
SQLAlchemy выдает CREATE TABLE
со столбцами, упорядоченными по вашему желанию:
CREATE TABLE `GYROINFO` (
id INTEGER NOT NULL AUTO_INCREMENT,
date DATETIME NOT NULL,
PRIMARY KEY (date, id)
)
Но это отклонено MySQL
:
Incorrect table definition; there can be only one auto column and it must be defined as a key
Однако возникает вопрос, зачем вообще нужно поле date
в первичном ключе. Поскольку id
является автоматически увеличивающимся, оно будет уникальным для всех записей в таблице, поэтому включение date
в составное поле с id
не добавляет дополнительной сложности. Я бы придерживался:
class Gyroinfo(Base):
__tablename__ = 'GYROINFO'
id = Column(Integer, autoincrement=True, primary_key=True)
date = Column(DateTime, index=True)
19.07.2018
PostgreSQL
... Невозможно определить порядок индекса первичного ключа. 09.03.2021