gpt4 book ai didi

python - 是否可以在 SQLAlchemy 中卸载声明类?

转载 作者:太空狗 更新时间:2023-10-29 20:28:45 25 4
gpt4 key购买 nike

我正在开发一个库,用户可以在其中简单地声明一些由数据库自动支持的类。简而言之,隐藏在代码中的某个地方,有

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class LibraryBase(Base):
# important library stuff

然后用户应该这样做

class MyStuff(LibraryBase):
# important personal stuff

class MyStuff_2(LibraryBase):
# important personal stuff

mystuff = MyStuff()
Library.register(mystuff)
mystuff.changeIt() # apply some changes to the instance
Library.save(mystuff) # and save it

# same for all other classes

在静态环境中,例如用户创建了一个包含所有个人类(class)的文件并导入了该文件,效果很好。所有类名都是固定的,SQLAlchemy 知道如何映射每个类。

在交互式环境中,情况有所不同:现在,一个类有可能被定义两次。这两个类可能有不同的模块;但 SQLAlchemy 仍然会提示:

SAWarning: The classname 'MyStuff' is already in the registry of this declarative base, mapped to < class 'OtherModule.MyStuff' >

有没有办法解决这个问题?我能否以某种方式从 declarative_base卸载一个类,以便我可以用一个新的定义来交换它的定义?

最佳答案

您可以使用:

sqlalchemy.orm.instrumentation.unregister_class(cl)
del cl._decl_class_registry[cl.__name__]

第一行是为了防止意外使用你未注册的类。第二个取消注册并将阻止警告。

关于python - 是否可以在 SQLAlchemy 中卸载声明类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5185825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com