2017-02-03 3 views
0

После обновления с SQLAlchemy 0.8.4 до 1.1.5 я получаю следующую ошибку. Что изменилось в SQLAlchemy, чтобы вызвать это? Как это исправить?«SQLite не поддерживает автоинкремент для составных первичных ключей» после обновления SQLAlchemy от 0.8 до 1.1

CompileError: (in table 'flights', column 'id'): SQLite does not support autoincrement for composite primary keys 
class Flights(db.Model): 
    __tablename__ = 'flights' 
    id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
    departure = db.Column(db.Integer, db.ForeignKey('airport.id'), primary_key=True) 
    arrival = db.Column(db.Integer, db.ForeignKey('airport.id'), primary_key=True) 

ответ

2

Это первичный ключ не имеет смысла. Нет смысла делать две внешние ключи частью первичной, она уже будет уникальной только благодаря автоинкрементации.

Если вы хотите, чтобы аэропорты были разными, используйте ограничение проверки. Если вы хотите быстро выполнить поиск по аэропортам, создайте индекс над столбцами.

Что касается ошибки, то проверка на случаи, когда автоинкрементные и составные ключи были использованы с SQLite was added in 1.1, с соответствующими explanation in the docs. Вероятно, он не делал то, что вы ожидали раньше, но не вызвал ошибку.

+0

Спасибо, что предоставили столько информации в нескольких коротких предложениях. Таким образом, другой вариант заключается в том, чтобы отбросить столбец id, но сохраните оба оставшихся столбца в качестве первичных ключей (пока они не будут автоматически увеличиваться). – Calaf

+0

Это не имеет смысла, потому что для данной пары (назначения, прибытия) будет более одного полета. Использование идентификатора имеет смысл, это похоже на номер рейса. – davidism

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