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