Sqlalchemy Alembic不生成复合主键
我有一个SQLAlchemy模型,比如-Sqlalchemy Alembic不生成复合主键,sqlalchemy,alembic,Sqlalchemy,Alembic,我有一个SQLAlchemy模型,比如- class UserFavPlace(db.Model): # This model stores the feedback from the user whether he has # faved a place or not __tablename__ = u'user_fav_places' id = db.Column(db.Integer, primary_key = True) public_plac
class UserFavPlace(db.Model):
# This model stores the feedback from the user whether he has
# faved a place or not
__tablename__ = u'user_fav_places'
id = db.Column(db.Integer, primary_key = True)
public_place_id = db.Column(db.Integer, db.ForeignKey(u'public_places.id'))
user_id = db.Column(db.Integer, db.ForeignKey(u'users.user_id'))
fav = db.Column(db.Boolean)
updated_time = db.Column(db.DateTime)
place = relationship(u'PublicPlace', backref = u'user_fav_places')
user = relationship(u'User', backref = u'user_fav_places')
然后我把这个模型改成如下-
class UserFavPlace(db.Model):
# This model stores the feedback from the user whether he has
# faved a place or not
__tablename__ = u'user_fav_places'
public_place_id = db.Column(db.Integer, db.ForeignKey(u'public_places.id'),
primary_key = True)
user_id = db.Column(db.Integer, db.ForeignKey(u'users.user_id'),
primary_key = True)
fav = db.Column(db.Boolean)
updated_time = db.Column(db.DateTime)
place = relationship(u'PublicPlace', backref = u'user_fav_places')
user = relationship(u'User', backref = u'user_fav_places')
但是,Alembic没有生成正确的升级和降级语句。似乎它没有添加新引入的主键约束
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.drop_column('user_fav_places', 'id')
### end Alembic commands ###
def downgrade():
### commands auto generated by Alembic - please adjust! ###
op.add_column('user_fav_places', sa.Column('id', mysql.INTEGER(display_width=11), nullable=False))
### end Alembic commands ###
我不知道如何添加这个 我发现自动生成在检测主键/外键更改方面非常糟糕。这没关系,通常你还是想定制它们 我还没有创建复合主键,但看起来这应该可以根据文档进行操作: 但是,您可能会遇到另一个问题,我在这里写到: 在alembic的较新版本中可能已经修复了这一问题,但它可能不允许您在现有表上创建主键(有关原因,请参阅上面的答案)。如果发生这种情况,您可以自己设计SQL并使用op.execute运行它
希望有帮助 更正了对Alembic文档的引用:顺便说一下,如果数据库中已有数据,请确保没有重复。如果有,请前往
op.create_primary_key(
"pk_user_fav_places", "user_fav_places",
["public_place_id", "user_id"]
)