如何使用 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
,这就是您在异常中看到的 <class 'type'>
来自。
【讨论】:
dependent_objects
支持哪些类型的对象?
"dependent_objects() 被记录为采用“SQLAlchemy 声明性模型对象”以上是关于如何使用 sqlalchemy_utils.dependent_objects()?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?