在Python中执行Postgresql查询以创建表

时间:2014-10-16 09:22:00

标签: python postgresql

我正在创建一个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这样的数据库管理工具中运行查询时,这两者都有效。

1 个答案:

答案 0 :(得分:0)

这就是Flask-Migrate的用途:http://flask-migrate.readthedocs.org/en/latest/