【发布时间】:2021-07-25 18:12:15
【问题描述】:
我有一个更新的模型
在用户之前
class Users(db.Model):
username = db.Column(db.String(64), index=True, unique=True)
user_created_timestamp = db.Column(db.DateTime)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
user_uuid = db.Column(UNIQUEIDENTIFIER, primary_key=True)
scores = db.relationship("Scores", backref="owner", lazy="dynamic")
在用户之后
class Users(db.Model):
uuid = db.Column(UNIQUEIDENTIFIER, primary_key=True)
email = db.Column(db.String(120), index=True, unique=True)
user_created_timestamp = db.Column(db.DateTime)
password_hash = db.Column(db.String(128))
scores = db.relationship("Scores", backref="owner", lazy="dynamic")
所以我想删除用户名并将 user_uuid 重命名为 uuid。
我生成了一个迁移文件并修复了一些删除用户名的错误,但我无法将 user_uuid 重命名为 uuid。
这里是迁移脚本
op.add_column('users', sa.Column('uuid', mssql.UNIQUEIDENTIFIER(), nullable=False))
sa.PrimaryKeyConstraint("uuid")
op.create_foreign_key(None, 'scores', 'users', ['user_uuid'], ['uuid'])
op.drop_constraint('FK__scores__user_uui__17F790F9', 'scores', type_='foreignkey')
op.drop_index(op.f("ix_users_username"), table_name="users")
op.drop_column('users', 'username')
op.drop_constraint('pk_users', 'users', type_='primary')
op.drop_column('users', 'user_uuid')
这是错误
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]引用的表中没有主键或候选键'与外键“FK__scores__user_uui__2BFE89A6”中的引用列列表匹配的用户。(1776) (SQLExecDirectW)
我了解错误的含义,但在我的一生中,即使对原始迁移进行了多次更改,我也无法更新此错误。有什么明显的我做错了吗?
【问题讨论】:
-
我至少已经确定问题出在 create_foreign_key 行。
-
如果这实际上是关于 Alembic 的问题,那么它应该被标记为这样。
-
@GordThompson 好的。我标记了它。很高兴知道未来。
标签: sql-server python-3.x sqlalchemy azure-sql-database alembic