反正有迭代数据库对象并调用它们吗? [复制]
Posted
技术标签:
【中文标题】反正有迭代数据库对象并调用它们吗? [复制]【英文标题】:Python iterating through object attributes [duplicate] 【发布时间】:2022-01-20 01:59:48 【问题描述】:我有一个带有字段的数据库对象db
db.one = 1
db.two = 2
db.three = 3
有没有办法做类似的事情
require_comparison_list = ["one", "three"]
for field in dir(db):
if field in reqire_comparison_list:
print(db.field)
db.field
会给我 1 和 3。
谢谢
【问题讨论】:
其实nvm,这正是我需要的:***.com/questions/25150955/… 有人可以将此标记为重复吗?谢谢 【参考方案1】:您需要定义数据库挂钩,例如气流数据库挂钩。在我的代码中:
from airflow.hooks import oracle_hook
from airflow.hooks import mysql_hook
#define hook
hook_38=mysql_hook.MySqlHook("hook_38")
hook_65=mysql_hook.MySqlHook("hook_65")
ora1_hook = oracle_hook.OracleHook("oracle_pl")
#get_conn
conn_dict='screen_oracle':ora1_hook.get_conn(),'hook_65':hook_65.get_conn(),'hook_38':hook_38.get_conn()
#iter db and query
for v in conn_dict.values():
#to do something
v.close()
【讨论】:
那么几乎迭代字典。有没有办法像 db + '.one' 一样得到 db.one ? 可以用eval('db'+'.one'),这样可以把string转成var。eval()
是错误的工具。 Python 有getattr
就是为了这个目的,动态获取对象的属性,并且是安全的。在极少数情况下,eval()
真的需要。以上是关于反正有迭代数据库对象并调用它们吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章