【发布时间】:2016-11-24 20:43:42
【问题描述】:
我为MyModel 模型添加了一个独特的属性uid:
class MyModel(db.Model):
...
uid = db.Column(db.String(50), nullable=False)
...
__table_args__ = (UniqueConstraint('uid', name='unique_uid'),)
我有一个迁移:
def upgrade():
op.add_column('mymodel', sa.Column('uid', sa.String(length=50), nullable=True))
mymodel = table('mymodel', column('uid'))
op.execute(mymodel.update().values(uid=generate_uid()))
op.create_unique_constraint('unique_uid', 'mymodel', ['uid'])
op.alter_column(
table_name='mymodel',
column_name='uid',
nullable=False
)
在运行 db upgrade 时出现错误:
...
psycopg2.IntegrityError: could not create unique index "unique_uid"
DETAIL: Key (uid)=(c92U6txA2) is duplicated.
如何在 op.execute(mymodel.update().values(uid=generate_uid())) 上为每一行设置唯一值?
$ pip freeze
alembic==0.8.6
Flask==0.10.1
Flask-Fixtures==0.3.3
Flask-Login==0.3.2
Flask-Migrate==1.8.0
Flask-Script==2.0.5
Flask-SQLAlchemy==2.1
itsdangerous==0.24
Jinja2==2.8
Mako==1.0.4
MarkupSafe==0.23
psycopg2==2.6.1
python-editor==1.0
requests==2.10.0
SQLAlchemy==1.0.13
Werkzeug==0.11.9
【问题讨论】:
-
什么是
generate_uid()?你用的是什么数据库? -
我认为这并不重要。但尽管如此:generate_uid() 返回唯一值,如 1Er45gh78k;数据库是 PostgreSQL
标签: flask sqlalchemy alembic flask-migrate sqlalchemy-migrate