SQLAlchemy + MYSQL唯一字符串列被截断

时间:2015-03-02 16:32:32

标签: python mysql sqlalchemy

我想强制列的唯一性,但在向数据库添加对象后,此唯一列中的字符串将被截断。我的模型定义如下:

class Topic(Base):
    __tablename__ = 'topic'
    id = Column(Integer(), primary_key=True)
    slug = Column(String(256), nullable=False, unique=True)
    name = Column(String(256))

我正在使用SQLAlchemy和MYSQL。当我检查创建的表时:

mysql> DESCRIBE topic;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| slug     | varchar(10)  | NO   | UNI | NULL    |                |
| name     | varchar(256) | YES  |     | NULL    |                |

如何让slug列具有类型varchar(256)和Key UNI?

1 个答案:

答案 0 :(得分:1)

SQLAlchemy不支持数据库迁移。为此,您需要Alembic之类的东西,这是由编写SQLAlchemy的同一个人创作的。

或者,您可以直接在MySQL服务器上发出DDL语句,并在Python中更改表定义。

[在mysql上]

ALTER TABLE topic MODIFY COLUMN slug VARCHAR(256);

[在python上]

class Topic(Base):
    __tablename__ = 'topic'
    id = Column(Integer(), primary_key=True)
    slug = Column(String(256), nullable=False, unique=True)
    name = Column(String(256))