Ich kann nicht herausfinden, wie AUTO_INCREMENT auf einer eindeutigen Spalte setzen mit sqlalchemy 0.6.0 mit MySQL 5.Setzen Sie AUTO_INCREMENT mit SqlAlchemy mit MySQL auf Spalten mit Nicht-Primärschlüsseln?
Ich weiß, das in MySQL getan werden kann, aber ich will nicht extra haben zu verteilen. SQL-Skripte, um die Datenbanken für meine Anwendung einzurichten. Ich möchte, dass SqlAlchemy das Schema in Python erstellt.
Was ich gefunden habe, so weit, gibt es zwei Möglichkeiten, dass eine Spalte ein automatischer Erhöhung Typ Spalte in sqlalchemy werden kann:
- Es ist die erste
sqlalchemy.types.Integer
Spalte in der Tabelle, dieprimary_key=True
hat und hat in seiner Definitionautoincrement=False
nicht festgelegt.- Mit MSSQL dies fügt eine
INDEX(m,n)
Eigenschaft auf die Säule. - Bei Postgres wird der Spaltentyp
SERIAL
verwendet. - Mit MySQL fügt die Spalte die
AUTO_INCREMENT
-Eigenschaft hinzu.
- Mit MSSQL dies fügt eine
- Es ist eine
sqlalchemy.types.Integer
Spalte, und ist mit einemsqlalchemy.schema.Sequence
Objekt als Argument instanziiert.- Mit MSSQL fügt das eine Spalte
INDEX(m,n)
zu der Spalte hinzu. - Bei Postgres wird der Spaltentyp
SERIAL
verwendet. - Mit MySQL scheint dies ignoriert zu werden.
- Mit MSSQL fügt das eine Spalte
So kann ich nicht # 1 verwenden, da die Spalte I auto_increment wollen nicht im Primärschlüssel ist (noch sollte es sein). Und ich kann # 2 nicht verwenden, weil es nicht mit MySQL funktioniert.
Grundsätzlich mein Code die Tabelle zu definieren, sieht wie folgt aus:
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)
und produziert diese SQL die Tabelle zu erstellen:
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)
)
Was kann ich es tun, um das zu produzieren folgenden 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)
)
Bis jetzt habe ich noch nie so auch direkt zu tun in MySQL verwaltet, weil ich nie explizit versucht, das Nicht-Primärschlüssel automatisch inkrementierte Feld als UNIQUE markiert. Danke für das. – newtover