Sqlalchemy自动加载似乎一次加载多个模式
我有一个现有的中子lbaas数据库来重建ORM 然后我使用Sqlalchemy自动加载数据库中的一些表。我发现它不仅自动加载了我定义为类的表,而且还将一些其他表模式自动加载到元数据对象中 例如,我的代码是:Sqlalchemy自动加载似乎一次加载多个模式,sqlalchemy,flask-sqlalchemy,Sqlalchemy,Flask Sqlalchemy,我有一个现有的中子lbaas数据库来重建ORM 然后我使用Sqlalchemy自动加载数据库中的一些表。我发现它不仅自动加载了我定义为类的表,而且还将一些其他表模式自动加载到元数据对象中 例如,我的代码是: 类负载平衡器(基本): __tablename_uuu='lbaas_loadbalancers' __表_args_uu={'autoload':True} 类侦听器(基): __tablename_uuu='lbaas_侦听器' __表_args_uu={'autoload':True}
类负载平衡器(基本):
__tablename_uuu='lbaas_loadbalancers'
__表_args_uu={'autoload':True}
类侦听器(基):
__tablename_uuu='lbaas_侦听器'
__表_args_uu={'autoload':True}
loadbalancer\u id=列(“loadbalancer\u id”)
#类池(基):
#_uuutablename_uuuu='lbaas\u pools'
#_uuu表_u参数uuuu={'autoload':True,'extend_uexisting':True}
#loadbalancer\u id=列(“loadbalancer\u id”)
#healthmonitor\u id=列(字符串,ForeignKey('lbaas\u healthmonitors.id'))
#成员=关系(“成员”)
#healthmonitor=关系(“监视器”,uselist=False)
#班长(基本):
#_uuutablename_uuuu='lbaas\u healthmonitors'
#_uuu表_u参数uuuu={'autoload':True}
#班级成员(基本):
#_uuutablename_uuuu='lbaas\u成员'
#_uuu表_u参数uuuu={'autoload':True}
正如您所看到的,上面的类,我对其中一些进行了评论
当我运行代码时,我通过方法models.metadata.sorted\u tables
打印元数据对象中的表。如下图所示:
对于models.metadata.sorted_表中的t:
打印t.name
它给了我这些表名:
口味
lbaas_健康监测器
标准属性
网络
港口
lbaas_负载平衡器
lbaas_池
lbaas_听众
我们可以看到名称flavors
,lbaas\u healthmonitors
,lbaas\u healthmonitors
,standardattributes
,网络
,端口
,lbaas\u池
,我在代码中没有将它们定义或引用为Python类。它们似乎也是由Sqlalchmey自动加载的
因此,关于上述代码有三个相关问题:
第一个问题是:
我猜自动加载:True
将随机加载比我们预期更多的模式。是这样吗
第二个问题是:
如果它自动加载一些模式(未定义类),如上表中的lbaas\u pools
。然后,我想定义一个类池(基本)
,其中包含loadbalancer\u id
和healthmonitor\u id
,我必须在编写Python类时设置'extend\u existing':True
。是这样吗?我参考了这个答案https://stackoverflow.com/questions/31595625/sqlalchemy-doesnt-autoload-all-my-columns
第三个问题是:
如果以上两种猜测都是正确的。因此,开发人员何时知道在他们的代码中使用'extend_existing':True
。因为Sqlalchmey可能自动加载元数据对象中已有的架构,所以我们需要设置'extend\u existing':True
,但有时它还没有自动加载架构,所以我们不需要设置'extend\u existing':True
请帮忙,非常感谢