小编ant*_*ris的帖子

在带有非主键的列上使用带有MySQL的SqlAlchemy设置AUTO_INCREMENT?

我无法弄清楚如何使用带有MySQL 5的SqlAlchemy 0.6.0在UNIQUE列上设置AUTO_INCREMENT.

我知道这可以在MySQL中完成,但我不想分发额外的.sql脚本来为我的应用程序设置数据库.我希望SqlAlchemy从Python中构建模式.

到目前为止,我发现有两种方法可以使列成为SqlAlchemy中的自动递增类型列:

  1. 它是sqlalchemy.types.Integer表中第一列在其定义中设置primary_key=True和未autoincrement=False设置的列.
    • 使用MSSQL,这会INDEX(m,n)为列添加属性.
    • 使用Postgres会导致使用SERIAL列类型.
    • 使用MySQL将AUTO_INCREMENT属性添加到列.
  2. 它是一个sqlalchemy.types.Integer列,并以sqlalchemy.schema.Sequence对象作为参数进行实例化.
    • 使用MSSQL,这会INDEX(m,n)为列添加属性.
    • 使用Postgres会导致使用SERIAL列类型.
    • 使用MySQL这似乎被忽略了.

所以我不能使用#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)
Run Code Online (Sandbox Code Playgroud)

并生成此SQL来创建表:

CREATE TABLE person ( …
Run Code Online (Sandbox Code Playgroud)

mysql sqlalchemy auto-increment

17
推荐指数
2
解决办法
8529
查看次数

标签 统计

auto-increment ×1

mysql ×1

sqlalchemy ×1