Tôi không thể tìm ra cách đặt AUTO_INCREMENT trên cột UNIQUE bằng cách sử dụng SqlAlchemy 0.6.0 với MySQL 5.Đặt AUTO_INCREMENT bằng cách sử dụng SqlAlchemy với MySQL trên Cột với các khóa không phải là chính?
Tôi biết điều này có thể được thực hiện trong MySQL, nhưng tôi không muốn phân phối thêm. sql script để thiết lập cơ sở dữ liệu cho ứng dụng của tôi. Tôi muốn SqlAlchemy xây dựng lược đồ từ bên trong Python.
Theo như tôi đã tìm thấy cho đến nay, có hai cách mà một cột có thể trở thành một loại cột tự động incrementing trong SQLAlchemy:
- Đây là
sqlalchemy.types.Integer
cột đầu tiên trong bảng cóprimary_key=True
và không cóautoincrement=False
được đặt trong định nghĩa của nó.- Với MSSQL, điều này thêm một thuộc tính
INDEX(m,n)
vào cột. - Với Postgres, điều này khiến cho loại cột
SERIAL
được sử dụng. - Với MySQL thêm thuộc tính
AUTO_INCREMENT
vào cột.
- Với MSSQL, điều này thêm một thuộc tính
- Đây là cột
sqlalchemy.types.Integer
và được khởi tạo với đối tượngsqlalchemy.schema.Sequence
làm đối số.- Với MSSQL, điều này thêm một thuộc tính
INDEX(m,n)
vào cột. - Với Postgres, điều này khiến cho loại cột
SERIAL
được sử dụng. - Với MySQL, điều này dường như bị bỏ qua.
- Với MSSQL, điều này thêm một thuộc tính
Vì vậy, tôi không thể sử dụng # 1 vì cột Tôi muốn auto_increment không nằm trong khóa chính (và cũng không cần). Và tôi không thể sử dụng # 2 vì nó không hoạt động với MySQL.
Về cơ bản, mã của tôi để xác định bảng trông giống như sau:
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)
Và sản xuất SQL này để tạo bảng:
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)
)
tôi có thể làm gì để có được nó để sản xuất sau 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)
)
Cho đến bây giờ tôi chưa bao giờ được quản lý để làm điều này thậm chí trực tiếp trong MySQL, bởi vì tôi không bao giờ cố gắng để đánh dấu một cách rõ ràng lĩnh vực tự động tăng lên chính phi chính như UNIQUE. Cảm ơn vì điều đó. – newtover