no puedo encontrar la manera de configurar AUTO_INCREMENT en una columna único usando sqlalchemy 0.6.0 con MySQL 5.Establecer AUTO_INCREMENT utilizando SqlAlchemy con MySQL en Columnas con claves no primarias?
Sé que esto se puede hacer de MySQL, pero no quiero tener que distribuir adicional. scripts sql para configurar las bases de datos para mi aplicación. Quiero que SqlAlchemy construya el esquema desde dentro de Python.
Por lo que he encontrado hasta el momento, hay dos maneras en que una columna puede convertirse en una columna de tipo de incremento automático en sqlalchemy:
- Es la primera columna de
sqlalchemy.types.Integer
en la tabla que tieneprimary_key=True
y no tieneautoincrement=False
establecido en su definición.- Con MSSQL esto agrega una propiedad
INDEX(m,n)
a la columna. - Con Postgres esto hace que se use el tipo de columna
SERIAL
. - Con MySQL agrega la propiedad
AUTO_INCREMENT
a la columna.
- Con MSSQL esto agrega una propiedad
- Es una columna
sqlalchemy.types.Integer
y se crea una instancia con un objetosqlalchemy.schema.Sequence
como argumento.- Con MSSQL esto agrega una propiedad
INDEX(m,n)
a la columna. - Con Postgres esto hace que se use el tipo de columna
SERIAL
. - Con MySQL esto parece ser ignorado.
- Con MSSQL esto agrega una propiedad
Así que no puedo utilizar # 1 porque la columna quiero auto_increment no está en la clave principal (ni debe ser). Y no puedo usar el n. ° 2 porque no funciona con MySQL.
Básicamente, mi código para definir la tabla tiene el siguiente aspecto:
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)
y produce este SQL para crear la tabla:
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)
)
¿Qué puedo hacer para conseguir que se produzca la siguiendo 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)
)
Hasta ahora nunca han logrado hacer esto incluso directamente en MySQL, porque nunca he intentado marcar explícitamente el campo auto-incrementa clave no primaria como único. Gracias por eso. – newtover