Io non riesco a capire come impostare AUTO_INCREMENT su una colonna univoca utilizzando SQLAlchemy 0.6.0 con MySQL 5.Impostare AUTO_INCREMENT utilizzando SqlAlchemy con MySQL su colonne con chiavi non principali?
So che questo può essere fatto in MySQL, ma io non voglio avere a distribuire in più. script sql per configurare i database per la mia applicazione. Voglio che SqlAlchemy costruisca lo schema da Python.
Per quanto ho trovato finora, ci sono due modi che una colonna può diventare una colonna di tipo incremento automatico in SQLAlchemy:
- E 'la prima
sqlalchemy.types.Integer
colonna della tabella che haprimary_key=True
e non haautoincrement=False
impostato nella sua definizione.- Con MSSQL questo aggiunge una proprietà
INDEX(m,n)
alla colonna. - Con Postgres viene utilizzato il tipo di colonna
SERIAL
. - Con MySQL aggiunge la proprietà
AUTO_INCREMENT
alla colonna.
- Con MSSQL questo aggiunge una proprietà
- È una colonna
sqlalchemy.types.Integer
ed è un'istanza con un oggettosqlalchemy.schema.Sequence
come argomento.- Con MSSQL questo aggiunge una proprietà
INDEX(m,n)
alla colonna. - Con Postgres viene utilizzato il tipo di colonna
SERIAL
. - Con MySQL questo sembra essere ignorato.
- Con MSSQL questo aggiunge una proprietà
Quindi non posso usare 1 # perché la colonna che voglio auto_increment non è nella chiave primaria (né deve essere). E non posso usare # 2 perché non funziona con MySQL.
Fondamentalmente, il mio codice per definire la tabella si presenta come la seguente:
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)
e produce questo SQL per creare la tabella:
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)
)
Che cosa posso fare per ottenerlo per produrre la seguendo 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)
)
Fino ad ora non sono mai riuscito a farlo anche direttamente in MySQL, perché non ho mai cercato di marcare in modo esplicito il campo auto-increment chiave non primario come unica. Grazie per questo. – newtover