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

SQLAlchemy + MYSQL unique string column gets truncated

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

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。当我检查创建的 table 时:

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?

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

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

[在 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))