2015-02-24 92 views
2

我创建了金字塔SQLAlchemy的和我的models.py类包含以下内容:删除约束在SQLAlchemy的

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命令,但约束不会丢失,并且出现此错误。

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

如何删除/修改此约束?

回答

4

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

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

+0

呵呵:(如果我删除自动创建的.sqlite数据库并重新运行初始化的b命令,是否就足够了? – Tania 2015-02-24 06:46:06

+1

是的,这将是“丢弃数据库”在sqlite3 – 2015-02-24 06:49:08

+0

像魅力一样工作.. – Tania 2015-02-24 09:25:40