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

标签 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?

最佳答案

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

关于python - SQLAlchemy + MYSQL 唯一字符串列被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28814804/

相关文章:

python - 如何在多个级别的用户之间平均共享资源

Python装饰类

python - 用列表中的值替换 pandas 子集中的所有值

php - 从数据库中读取,单行(Joomla 框架)

mysql - PHP/MySQL : How to compare selected value with input received via $_POST

python - Sqlalchemy 双关联表?

python - 在 sqlalchemy 中绑定(bind)关系时分配变量

Python - 在内存中查找当前对象

mysql - MySql 中的 STR_TO_DATE 给出错误

python - 如何使用 Flask/SQLalchemy/Alembic 初始化数据库表?