我在带有基本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/