我不知道如何使用SqlAlchemy 0.6.0和MySQL 5在唯一的列上设置AUTO_INCREMENT。
我知道这可以在MySQL中完成,但是我不想为了为我的应用程序设置数据库而不得不分发额外的.sql脚本。我希望SqlAlchemy从Python中构建模式。
到目前为止,我发现在SqlAlchemy中有两种方法可以使列成为自动递增类型的列:
primary_key=True
且在其定义中未设置autoincrement=False
的sqlalchemy.types.Integer
列。这将向列添加一个INDEX(m,n)
属性。
SERIAL
列类型。带有MySQL的
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)
)
https://stackoverflow.com/questions/2937229
复制相似问题