2015-03-02 86 views
0

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

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)和关键UNI?

回答

1

SQLAlchemy不支持数据库迁移。为此,您需要类似于Alembic之类的东西,它由编写SQLAlchemy的同一人编写。

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

[MySQL的]

ALTER TABLE topic MODIFY COLUMN slug VARCHAR(256); 

[上蟒]

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

谢谢您的答复。我还发现,最大密钥长度为767字节,因此String(256)不适合。我能够减少长度,一切正常。 – MarkAWard 2015-03-02 16:47:12