反正有迭代数据库对象并调用它们吗? [复制]

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()真的需要。

以上是关于反正有迭代数据库对象并调用它们吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

React:迭代深度嵌套的对象并显示它们而不会撕裂我的头发

我可以在 C++ 中转换对象并访问私有数据成员吗?

迭代一个数组并只返回匹配的值? [复制]

比较两个列表并选择最大值和最小值。 (float 不是可迭代对象)

Java枚举可以迭代吗? [复制]

Python迭代器