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