Я не могу выяснить, как установить AUTO_INCREMENT на столбце UNIQUE с помощью SqlAlchemy 0.6.0 с MySQL 5.
Я знаю, что это может быть сделано в MySQL, но я не хочу должным быть распределять дополнительные .sql сценарии для установки баз данных для моего приложения. Я хочу, чтобы SqlAlchemy создал схему из Python.
Насколько я нашел до сих пор, существует два способа, которыми столбец может стать столбцом типа автопостепенного увеличения в SqlAlchemy:
sqlalchemy.types.Integer
столбец в таблице, которая имеет primary_key=True
и не имеет autoincrement=False
набор в его определении. INDEX(m,n)
свойство к столбцу.SERIAL
тип столбца, который будет использоваться.AUTO_INCREMENT
свойство к столбцу.sqlalchemy.types.Integer
столбец, и инстанцируют с sqlalchemy.schema.Sequence
возразите как аргумент. INDEX(m,n)
свойство к столбцу.SERIAL
тип столбца, который будет использоваться.Таким образом, я не могу использовать № 1, потому что столбец, который я хочу к auto_increment, не находится в первичном ключе (и при этом это не должно быть). И я не могу использовать № 2, потому что Он не работает с MySQL.
В основном мой код для определения таблицы похож на следующее:
from sqlalchemy import Column
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.schema import Sequence
from sqlalchemy.types import Integer, Unicode
Base = declarative_base()
class Person(Base):
__tablename__ = "person"
id = Column(Integer, nullable=False, unique=True)
first_name = Column(Unicode(100), nullable=False, primary_key=True)
last_name = Column(Unicode(100), nullable=False, primary_key=True)
И производит этот SQL для составления таблицы:
CREATE TABLE person (
id INTEGER NOT NULL,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
PRIMARY KEY (first_name, last_name),
UNIQUE (id)
)
Что я могу сделать, чтобы заставить это производить следующий SQL?
CREATE TABLE person (
id INTEGER NOT NULL AUTO_INCREMENT,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
PRIMARY KEY (first_name, last_name),
UNIQUE (id)
)
Возможно, вас заинтересует Мне нужно автоинкрементировать поле в MySQL это не первичный ключ
. Я не знаком с sqlalchemy, но знаю, что это можно сделать в MySQL. Сначала необходимо определить столбец id
как ПЕРВИЧНЫЙ КЛЮЧ
и установить его AUTO_INCREMENT
. Затем вы можете ИЗМЕНИТЬ ТАБЛИЦУ
и УДАЛИТЬ ПЕРВИЧНЫЙ КЛЮЧ
, заменив его на ДОБАВИТЬ УНИКАЛЬНЫЙ КЛЮЧ
. Это сохранит функциональность AUTO_INCREMENT
в этом столбце. Затем вы можете создать ПЕРВИЧНЫЙ КЛЮЧ
в других столбцах.
Чтобы разбить его, ваш первый шаг - создать таблицу следующим образом:
CREATE TABLE person (
id INTEGER NOT NULL AUTO_INCREMENT,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
Затем измените ключ id
:
ALTER TABLE person DROP PRIMARY KEY, ADD UNIQUE KEY(id);
Наконец, добавьте свой ПЕРВИЧНЫЙ КЛЮЧ
в другие столбцы:
ALTER TABLE person ADD PRIMARY KEY(first_name, last_name);