我们需要创建SQLalchemy类,以访问多个外部数据源,这些数据源将随着时间的流逝增加。我们为核心ORM模型使用声明性基础,我知道我们可以使用autoLoad = true ture to auto生成映射手动指定新的ORM类。

问题在于,我们需要能够动态地以这样的方式生成它们:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

stored={}
stored['tablename']='my_internal_table_name'
stored['objectname']='MyObject'

并动态地将其变成类似的东西:

class MyObject(Base):
    __tablename__ = 'my_internal_table_name'
    __table_args__ = {'autoload':True}

我们不希望这些类持续超过打开连接,执行查询然后关闭连接的必要时间。因此,理想情况下,我们可以将项目放入上面的“存储”变量中,并根据需要将其拉动。另一个挑战是对象名称(例如“ MyObject”)可以在不同的连接上使用,因此我们不能将其定义一次并保持周围。

关于如何实现这一目标的任何建议将不胜感激。

谢谢...

有帮助吗?

解决方案

您可以动态创建 MyObject 使用 3条要求 type:

type(name, bases, dict)

    Return a new type object. This is essentially a dynamic form of the 
    class statement... 

例如:

mydict={'__tablename__':stored['tablename'],
        '__table_args__':{'autoload':True},}

MyObj=type(stored['objectname'],(Base,),mydict)
print(MyObj)
# <class '__main__.MyObject'>
print(MyObj.__base__)
# <class '__main__.Base'>
print(MyObj.__tablename__)
# my_internal_table_name
print(MyObj.__table_args__)
# {'autoload': True}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top