如何使用 sqlalchemy_utils.dependent_objects()?

Posted

技术标签:

【中文标题】如何使用 sqlalchemy_utils.dependent_objects()?【英文标题】:How to use sqlalchemy_utils.dependent_objects()? 【发布时间】:2019-12-21 23:16:47 【问题描述】:

我想使用dependent_objects() 方法来获取数据库中引用给定关系中特定实例的所有关系实例。我尝试了以下方法:

uri = "sqlite:///data.sqlite"

def getRecord(relName, uuid):

    engine = create_engine(uri, echo=False)
    listen(engine, 'connect', __load_spatialite)

    Session = sessionmaker(bind=engine)
    Session.configure(bind=engine)
    session = Session()

    metadata = MetaData()
    relation = Table(relName, metadata, autoload=True, autoload_with=engine)

    instance = session.query(relation).filter(text("id LIKE '" + uuid + "'"))
    dependent_objects(instance)

但它返回一个异常:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/sqlalchemy_utils/functions/foreign_keys.py", line 263, in dependent_objects
    foreign_keys = get_referencing_foreign_keys(obj)
  File "/usr/lib/python3/dist-packages/sqlalchemy_utils/functions/foreign_keys.py", line 86, in get_referencing_foreign_keys
    tables = get_tables(mixed)
  File "/usr/lib/python3/dist-packages/sqlalchemy_utils/functions/orm.py", line 416, in get_tables
    mapper = get_mapper(mixed)
  File "/usr/lib/python3/dist-packages/sqlalchemy_utils/functions/orm.py", line 301, in get_mapper
    return sa.inspect(mixed)
  File "/usr/lib/python3/dist-packages/sqlalchemy/inspection.py", line 75, in inspect
    type_)
sqlalchemy.exc.NoInspectionAvailable: No inspection system is available for object of type <class 'type'>

显然,dependent_objects() 在某个时候得到了一个未知对象,但不清楚是哪个。

【问题讨论】:

【参考方案1】:

dependent_objects() 是 documented 以获取“SQLAlchemy 声明性模型对象”(i.e.class User(base))。

考虑一个 User 对象在各种文章中被引用,并且以不同的顺序被引用。获取所有这些依赖对象就像:dependent_objects(user) [..]

常见的用例是在删除父对象之前检查所有限制依赖对象,并通知用户是否存在具有 ondelete='RESTRICT' 外键的依赖对象。

我不明白您为什么要尝试检查带有 WHERE 条件的查询,但这种对象不受支持 - 所以它最终会出现 in this part of get_mapper,这就是您在异常中看到的 &lt;class 'type'&gt;来自。

【讨论】:

dependent_objects 支持哪些类型的对象? "dependent_objects() 被记录为采用“SQLAlchemy 声明性模型对象”

以上是关于如何使用 sqlalchemy_utils.dependent_objects()?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?