Python 除了未按预期运行和postgresql问题之外

Python 除了未按预期运行和postgresql问题之外,python,postgresql,flask,Python,Postgresql,Flask,我正在创建一个简单的应用程序来连接postgresql数据库,查询它以列出所有表,并查询每个表以输出一些信息。我的代码正在运行,但我需要修复以下部分的一些问题。df_dbtables是数据库模式和表的数据框架 for index, row in df_dbtables.iterrows(): try: schema_table = row['schema'] + "." + row['table'] cur.execute("SELECT type,sty

我正在创建一个简单的应用程序来连接postgresql数据库,查询它以列出所有表,并查询每个表以输出一些信息。我的代码正在运行,但我需要修复以下部分的一些问题。df_dbtables是数据库模式和表的数据框架

for index, row in df_dbtables.iterrows():
    try:
        schema_table = row['schema'] + "." + row['table']
        cur.execute("SELECT type,stylename FROM %s" % schema_table)
        rows = cur.fetchall()
        for row in rows:
            data.append({"Type" : row[0], "Stylename" : row[1]})
    except:
        continue
问题#1: 我的第一张桌子运转得很好。但是第二个表没有类型字段,因此它会遇到以下postgresql错误:
psycopg2.errors.UndefinedColumn:列“type”不存在
然后,代码会运行到中,除了告诉代码继续的。问题是,在第一次运行到except之后,我的所有其他表查询也会运行到except,而忽略它们具有type和stylename字段。如何正确地忽略此错误消息并继续下一次迭代?另外,使用try/except输出SQL错误的最佳方法是什么

问题#2: 一旦解决了上述问题,我想知道如何防止这种情况:如果某个字段不存在并遇到SQL错误,它将忽略另一个字段(如果存在),因为它将运行到except。例如:脚本正在查询表X,这是一个没有类型字段的表,当它运行到时,它将忽略其样式名数据

改进: 我尝试了许多方法来参数化sql查询。我知道我使用的方法非常适合SQL注入,但正确的方法根本不起作用

已尝试,但无法成功运行它们

应用程序 我的下一步是为这段代码创建一个Flask应用程序。因此,如果您有一个使用烧瓶的解决方案,它将是受欢迎的

代码于7月12日更新。但仍然存在同样的问题:

for index, row in df_dbtables.iterrows():
    try:
        schema_table = row['schema'] + "." + row['table']
        cur = con.cursor()
        cur.execute("SELECT type,stylename FROM %s" % schema_table)
        for r in rs:
            data.append({"Type" : r[0], "Stylename" : r[1]})
    #except psycopg2.OperationalError: traceback.print_exc()
    except: continue

切勿写入
,除非:continue
。它会掩盖所有你想知道的错误,直到你的程序完成。改为执行此操作:
除了psycopg2。操作错误:traceback.print_exc()
。您报告的问题可能是,在异常之后,光标处于错误状态,重用它不起作用。实际上,打印错误而不是抑制错误将显示这一点。@BoarGules感谢您的评论。添加代码会显示错误
psycopg2.errors.UndefinedColumn:第二次迭代(如上所述)的列“type”不存在,然后它停止运行。如何继续?为每个
fetchall
创建一个新的游标,而不是尝试重用它。根据水坝的不同,馆长会感到疲惫不堪。@BoarGules我添加了一个cur=con.cursor(),但没有任何变化,你有什么建议吗。已更新主线程中的代码。请勿写入
,除非:continue
。它会掩盖所有你想知道的错误,直到你的程序完成。改为执行此操作:
除了psycopg2。操作错误:traceback.print_exc()
。您报告的问题可能是,在异常之后,光标处于错误状态,重用它不起作用。实际上,打印错误而不是抑制错误将显示这一点。@BoarGules感谢您的评论。添加代码会显示错误
psycopg2.errors.UndefinedColumn:第二次迭代(如上所述)的列“type”不存在,然后它停止运行。如何继续?为每个
fetchall
创建一个新的游标,而不是尝试重用它。根据水坝的不同,馆长会感到疲惫不堪。@BoarGules我添加了一个cur=con.cursor(),但没有任何变化,你有什么建议吗。更新了主线程中的代码。