簡體   English   中英

Psycopg2 Postgre連接重試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM