簡體   English   中英

除非 WHERE 子句硬編碼,否則 Psycopg2 不是空結果

[英]Psycopg2 not empty result unless WHERE clause hard coded

我正在嘗試使用 psycopg2 進行非常基本的查詢,但除非我對參數進行硬編碼,否則它不會給我結果,我做錯了什么? 可能是我在這里有午夜大腦,但我不這么認為......

這不起作用:

query = """SELECT TRIM(TRAILING FROM symbol) as symbol, timestamp, open, close, high, low, volume
                FROM trades_1_min
                WHERE symbol=%(symbol)s
                ORDER BY id DESC LIMIT 1"""
with db_conn.cursor() as cursor:
    cursor.execute(query, {'symbol': symbol})
    res = cursor.fetchall()
    cursor.close()
    return res
return None

而如果我在輸入 [... symbol='%(symbol)s'...] 周圍加上引號,我可以看到它實際上將查詢參數放在那里,因為我收到以下錯誤:

Traceback (most recent call last):
  File "testlol.py", line 22, in <module>
    main()
  File "testlol.py", line 20, in main
    print(get_latest("amd"))
  File "testlol.py", line 12, in get_latest
    cursor.execute(query, {'symbol': symbol})
psycopg2.errors.SyntaxError: syntax error at or near "amd"
LINE 3:                 WHERE symbol=''amd''

現在,如果我只是在 psql 中運行查詢,我就會得到答案。 是的,我連接到正確的數據庫,使用正確的用戶等。一個更簡單的查詢可以確認這一點。

import psycopg2

db_conn = psycopg2.connect(dbname="pi", user="pi", password="raspberry")

def lol():
    cursor = db_conn.cursor()
    cursor.execute('SELECT * FROM trades_1_min LIMIT 1')
    res = cursor.fetchall()
    print(res)

def get_latest(symbol):
    query = """SELECT TRIM(TRAILING FROM symbol) as symbol, timestamp, open, close, high, low, volume
            FROM trades_1_min
            WHERE symbol=%(symbol)s
            ORDER BY id DESC LIMIT 1"""
    with db_conn.cursor() as cursor:
        cursor.execute(query, {'symbol': symbol})
        res = cursor.fetchall()
        cursor.close()
        return res
    return None


def main():
    lol()
    #print(get_latest("amd"))

main()

這是表結構:表結構

所以我遇到的問題真的很愚蠢。 我的符號以大寫字母存儲。 所以我要的是“amd”,但我只有“AMD”,所以從邏輯上講它什么也沒找到……所以這確實是午夜大腦的一個案例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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