如何处理cx_Oracle连接内的for循环内的错误?

时间:2019-02-04 20:16:25

标签: python pandas cx-oracle

这是我要执行的操作的摘要:我有一个表名列表,我想针对一个oracle数据库运行sql,并为我的表列表中的每个表拉回表名和行数。但是,并不是我的表名列表中的每个表名实际上都必须在数据库中。这导致我的代码抛出数据库错误。我想做的是,每当我找到不在数据库中的表名时,我都会创建一个包含表名的数据框,而不是count(*),有一些文字说“找不到表”,或类似的东西。在循环的最后,我将所有数据帧串联为一个数据帧。这里的总体目标是验证某些表是否存在以及它们是否具有预期的行数。

query_list=[]

df_List=[]

connstr= '%s/%s@%s' %(username, password, server)
conn = cx_Oracle.connect(connstr)   

with conn:

        query_list = ["SELECT '%s' as tbl, count(*) FROM %s." %(elm, database) +elm for elm in table_list]

        df_List = [pd.read_sql(elm,conn) for elm in query_list]

df = pd.concat(df_List)

2 个答案:

答案 0 :(得分:0)

获取数据库中所有表名的列表,然后创建一个循环以查询每个表以获取行数。

这是一条SQL语句,用于获取Oracle DB中所有表的列表:

SQL:

SELECT DISTINCT TABLE_NAME FROM ALL_TAB_COLUMNS ORDER BY TABLE_NAME ASC;

Python(以列出要对其进行行计数并在数据库中存在的表的列表):

 list(set(tables_that_exist_in_DB) - (set(tables_that_exist_in_DB) - set(list_of_tables_you_want)))

答案 1 :(得分:0)

考虑CodArticulo CodArtProveedor Publico Interior 44380 K-7 697 767 00003 IM2757 1845 2030 00006 MTRJ6 156 172 00010 BERJ6 156 172 处理以返回查询输出或未找到表的输出:

try/except