2015-03-02 87 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