คอลัมน์สตริงเฉพาะของ 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    |                |

ฉันจะทำให้คอลัมน์กระสุนมีประเภท varchar (256) และ Key UNI ได้อย่างไร


person MarkAWard    schedule 02.03.2015    source แหล่งที่มา


คำตอบ (1)


SQLAlchemy ไม่รองรับการย้ายฐานข้อมูล เพื่อทำเช่นนั้น คุณจะต้องมี Alembic ซึ่งเขียนโดยบุคคลคนเดียวกันกับที่เขียน SQLAlchemy.

หรือคุณสามารถออกคำสั่ง DDL ได้โดยตรงบนเซิร์ฟเวอร์ MySQL และเปลี่ยน Table Definition ใน 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))
person Haleemur Ali    schedule 02.03.2015
comment
ขอขอบคุณสำหรับการตอบสนองของคุณ. ฉันยังค้นพบด้วยว่ามีความยาวคีย์สูงสุด 767 ไบต์ดังนั้น String(256) จะไม่พอดี ฉันสามารถลดความยาวได้และทุกอย่างทำงานได้ดี - person MarkAWard; 02.03.2015