我正在创建一个Flask webapp,它显示各种Postgresql查询的结果。作为初始化的一部分,我想运行一个查询,在Postgresql中创建一个包含后续查询所需的所有数据的表。我的问题是,虽然webapp似乎正确初始化(因为它不会抛出任何异常),我不知道新表存储在哪里(我相信我已正确命名它)我不能从任何其他查询访问它。
以下代码:
import psycopg2 as p2
import pandas
conn = p2.connect("dbname='x' user='y' host='z' password='password' port='1234'")
cur = conn.cursor()
def exec_postgres_file(cursor, postgres_file):
statement = open(postgres_file).read()
try:
cursor.execute(statement)
except (p2.OperationalError, p2.ProgrammingError) as e:
print "\n[WARN] Error during execute statement \n\tArgs: '%s'" % (str(e.args))
exec_postgres_file(cur,'/Filepath/initialization_query.sql')
cur.execute("""SELECT * FROM schema.new_table""")
rows = cur.fetchall()
new_table_df = pandas.DataFrame(rows)
print new_table_df
exec_postgres_file(cur,'/Filepath/query1.sql')
rows2 = cur.fetchall()
query1_df = pandas.DataFrame(rows2)
print query1_df
其中new_table是在initialization_query期间创建的表。 query1正在尝试访问new_table但在第二个exec_postgres_file语句之后抛出异常:
关系“new_table”不存在LINE 10
假设initialization_query是:
select *
into schema.new_table
from schema.old_table
where id in ('A','B','C','D','E','F')
;
和query1是:
select date, sum(revenue) as revenue
from schema.new_table
group by date
;
当我在像Navicat这样的数据库管理工具中运行查询时,这两者都有效。