[英]Psycopg2 Postgre Connection retries
我正在嘗試用Python編寫一些Web服務。 我使用Heroku及其postgre-DB服務(免費)。
但是我遇到了一個很小但是很煩人的問題。 當我嘗試在數據庫中搜索某些內容時,該程序會連接到數據庫,但是即使是第一次運行,它仍會繼續嘗試。
調用search_image函數的部分:
def handle_send(update):
link = databasecon.search_image(update["message"]["text"], update)
connect_to_database函數:
def connect_to_db():
global __is_connected
if "DATABASE_URL" not in os.environ or __is_connected == True:
print("Environment-variable missing or already connected")
else:
urllib.parse.uses_netloc.append("postgres")
url = urllib.parse.urlparse(os.environ["DATABASE_URL"])
con = psycopg2.connect(
database=url.path[1:],
user=url.username,
password=url.password,
host=url.hostname,
port=url.port
)
if con != None:
__is_connected = True
return con
search_image函數:
def search_image(image_name, update):
db_con = connect_to_db()
cur = db_con.cursor()
query = """select link from mm_image where id=%s"""
cur.execute(query, (image_name))
result = cur.fetchone()
if result != None:
image_link = str(result[0])
disconnect_from_db(db_con)
return image_link
else:
disconnect_from_db(db_con)
return "Not found"
這是在調用handle_send函數后,日志立即顯示的樣子: http : //i.stack.imgur.com/pTZcF.png
這里有什么問題?
這是我用Python編寫的第一個適當程序,因此,如果出現明顯錯誤,對不起:S
該行:
if "DATABASE_URL" not in os.environ or __is_connected == True:
print("Environment-variable missing or already connected")
else:
...將檢查DATABASE_URL
是否不存在,然后檢查__is_connected == True
(在第一次連接后為 true)。
因此,在每個后續檢查中,您的程序將要print("Environment-variable missing or already connected")
因為每次運行都會評估if __is_connected == True
。
您應該考慮將其進一步分解:
def connect_to_db():
global __is_connected
if __is_connected == True:
break;
elif "DATABASE_URL" not in os.environ:
print("DATABASE_URL not set")
else:
print("
urllib.parse.uses_netloc.append("postgres")
url = urllib.parse.urlparse(os.environ["DATABASE_URL"])
con = psycopg2.connect
// etc.
好的,我發現了錯誤。 執行函數需要一個元組作為第二個參數。
從官方用法文檔中:
對於位置變量綁定,即使第二個參數包含一個變量,它也必須始終是一個序列。 請記住,Python需要逗號來創建單個元素元組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.