首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Flask-SQLAlchemy中更改约束命名约定

在Flask-SQLAlchemy中更改约束命名约定
EN

Stack Overflow用户
提问于 2015-03-19 20:04:28
回答 2查看 2.1K关注 0票数 13

我想更改在Flask中设置的约束的标准命名约定,以简化使用Alembic的迁移。

当自己创建声明基(您可以在其中提供命名约定)时,我不确定这样做的最佳方法是什么。我是否可以在创建声明基之后更改命名约定(即,当我创建了对象时),还是必须对SQLAlchemy类进行子类化?有完全不同的方式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-19 20:06:07

Version2.1向扩展引入了metadata参数。如果只想自定义基本模型的元数据,则可以将自定义MetaData实例传递给它。

代码语言:javascript
复制
db = SQLAlchemy(metadata=MetaData(naming_convention={
    'pk': 'pk_%(table_name)s',
    'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
    'ix': 'ix_%(table_name)s_%(column_0_name)s',
    'uq': 'uq_%(table_name)s_%(column_0_name)s',
    'ck': 'ck_%(table_name)s_%(constraint_name)s',
}))

以前,您将子类SQLAlchemy类并重写make_declarative_base。这仍然有效,如果您需要进一步自定义基本模型,则非常有用。

代码语言:javascript
复制
from flask_sqlalchemy import SQLAlchemy as BaseSQLAlchemy, Model, _BoundDeclarativeMeta, _QueryProperty
from sqlalchemy import MetaData

class SQLAlchemy(BaseSQLAlchemy):
    def make_declarative_base(self):
        metadata = MetaData(naming_convention={
            'pk': 'pk_%(table_name)s',
            'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
            'ix': 'ix_%(table_name)s_%(column_0_name)s',
            'uq': 'uq_%(table_name)s_%(column_0_name)s',
            'ck': 'ck_%(table_name)s_%(constraint_name)s',
        })
        base = declarative_base(metadata=metadata, cls=Model, name='Model', metaclass=_BoundDeclarativeMeta)
        base.query = _QueryProperty(self)
        return base
票数 17
EN

Stack Overflow用户

发布于 2016-02-23 18:48:57

从Flask到SQLAlchemy2.1,您可以执行以下操作:

代码语言:javascript
复制
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import MetaData

metadata = MetaData(
  naming_convention={
    'pk': 'pk_%(table_name)s',
    'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
    'ix': 'ix_%(table_name)s_%(column_0_name)s',
    'uq': 'uq_%(table_name)s_%(column_0_name)s',
    'ck': 'ck_%(table_name)s_%(constraint_name)s',
    }
)
db = SQLAlchemy(metadata=metadata)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29153930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档