在SQLAlchemy中删除约束

时间:2015-02-24 06:09:12

标签: python mysql sqlalchemy pyramid

我在Pyramid-SQLAlchemy中创建了一个类,我的models.py包含以下内容:

class Students(Base):

    __tablename__ = 'students'
    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
    name = Column(String(50, convert_unicode=True), nullable=False, unique=True)  

我意外地创建了唯一约束并运行了initializedb.py命令,并创建了模式。我尝试删除唯一约束并重新运行initializedb.py命令,但Constraint不会丢失,我收到此错误。

sqlalchemy.exc.IntegrityError: (IntegrityError) column name is not unique u'INSERT INTO students (id,name) VALUES (?, ?)' (200,'Hailey')

如何删除/修改此约束?

1 个答案:

答案 0 :(得分:4)

金字塔initialize_*_db脚本调用MetaData.create_all,这是一个非常愚蠢的函数,因为它对任何具有相同名称的表(如果存在)感到满意。遗憾的是,您需要手动删除唯一约束,或者删除整个数据库并重新创建。

对于任何严肃的项目,我建议您使用Alembic来处理数据库模式迁移。