我正在使用 sqlalchemy 并尝试将 alembic 集成到数据库迁移中。
我的数据库当前存在,并且定义了许多没有名称的 ForeignKeys。我想添加一个命名约定以允许影响 ForeignKey 列的迁移。
我已将此处给出的命名约定添加到我的 models.py 文件的顶部: SQLAlchemy Naming Constraints
convention = {
"ix": 'ix_%(column_0_label)s',
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(constraint_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s"
}
DeclarativeBase = declarative_base()
DeclarativeBase.metadata = MetaData(naming_convention=convention)
def db_connect():
return create_engine(URL(**settings.DATABASE))
def create_reviews_table(engine):
DeclarativeBase.metadata.create_all(engine)
class Review(DeclarativeBase):
__tablename__ = 'reviews'
id = Column(Integer, primary_key=True)
review_id = Column('review_id', String, primary_key=True)
resto_id = Column('resto_id', Integer, ForeignKey('restaurants.id'),
nullable=True)
url = Column('url', String),
resto_name = Column('resto_name', String)
我已经按照教程说明设置了 alembic/env.py,将模型的元数据输入到 target_metadata 中。
当我跑
$: alembic current
我收到以下错误:sqlalchemy.exc.InvalidRequestError:包括 %(constraint_name)s 令牌的命名约定要求明确命名约束。
在文档中,他们说“即使我们只使用 Column.unique 标志,相同的功能 [使用命名约定为列生成名称] 也会生效:” 1,所以我认为不应该有问题(他们继续使用未命名的 ForeignKey 举一个例子)。
我是否需要返回并给我所有的约束明确的名称,或者有没有办法自动做到这一点?