除非未按预期运行以及PostgreSQL问题

时间:2019-07-10 21:33:46

标签: python postgresql flask

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

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: column "type" does not exist然后,代码运行到 except 中,告诉代码继续。问题在于,在第一次运行except之后,我的所有其他表查询也都运行在except中,而忽略了它们具有type和stylename字段。如何正确忽略此错误消息并继续进行下一个迭代?另外,使用try / except输出SQL错误的最佳方法是什么?

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

改进: 我尝试了许多方法来参数化sql查询。我知道我以前使用过的方法对SQL注入非常简单,但是正确的方法只是行不通。

尝试了these methodsothers,但无法成功运行它们。

APP 我的下一步是为此代码创建Flask应用。因此,如果您有使用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

0 个答案:

没有答案