Python psycopg2执行挂起

时间:2018-01-25 23:26:05

标签: python postgresql heroku psycopg2

我在使用基本PostgreSQL实例的Heroku上托管的应用程序中使用Python 3.x并使用psycopg2库(作为“lite”)

当我在游标对象上调用Execute时,最近开始挂起。

我不知道如何解决这个问题,并且不胜感激。

以下是我实例化Connection的方法:

def getConnection():
    urlparse.uses_netloc.append("postgres")
    url = urlparse.urlparse(os.environ["HEROKU_STUFF_HERE"])

        con = lite.connect(
            database=url.path[1:],
            user=url.username,
            password=url.password,
            host=url.hostname,
            port=url.port
        )

     return con

以下是我通常执行非返回类型语句的方法:

 def ExecuteSQL(sql):
    con = DB.getConnection()
    with con:
        cur = con.cursor()
        print("In")
        cur.execute(sql)
        print("out")

在将“In”字样打印到控制台后,应用程序永远不会看到灯光。

我已经离开了尝试,除了故意阻挡,以便把事情搞砸.....没有骰子。

几乎不管SQL语句是什么,我得到相同的结果

在sql客户端工具中运行相同的sql会立即执行。

我也不确定如何检测这个语句是否会进入Postgresql .....

感谢您提供的任何帮助

1 个答案:

答案 0 :(得分:0)

psycopg2打开了直到commit()或rollback()才关闭的事务。因此,您的更改不是永久性的(docs)。

def ExecuteSQL(sql):
  con = DB.getConnection()
  with con:
    cur = con.cursor()
    cur.execute(sql)
    con.commit()

或者您可以执行以下操作:

def ExecuteSQL(sql):
  con = DB.getConnection()
  with con:
    con.autocommit = True
    cur = con.cursor()
    cur.execute(sql)