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

当我在光标对象上调用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 .....

谢谢你尽你所能的帮助

最佳答案

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)

关于Python psycopg2执行挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48453543/

10-12 00:04
查看更多