PEP-249指定API用於數據庫驅動程序和pg8000
遵循這個API以及
pg8000 is a DB-API 2.0 compatible pure-Python interface to the PostgreSQL database engine.
從PEP-249execute
method specification:
Parameters may be provided as sequence or mapping and will be bound to variables in the operation.
我們可以在pg8000
sources看看如何通過一個例子要查詢的參數。
所以你應該通過一個tuple
/list
值,而不是價值本身。
此外,我們應該先執行查詢,然後使用fetchone
或fetchmany
或fetchall
獲取其結果,因爲execute
本身(在sources更多)返回None
。我猜OP需要一個記錄,所以我們要使用fetchone
。
注意:fetchone
方法返回的記錄表示爲tuple
,所以如果我們需要第一個座標,那麼我們應該get it using zero index。
在你的情況,你應該嘗試:
parameters = (str(member_id),) # WARNING: don't miss the comma
cursor.execute("SELECT titlequery(%s)", parameters)
title = cursor.fetchone()[0]
或
parameters = [str(member_id)]
cursor.execute("SELECT titlequery(%s)", parameters)
title = cursor.fetchone()[0]
例
這爲我工作
import pg8000
table_definition = """
CREATE TABLE Member(
title VARCHAR(40) NOT NULL,
member_id VARCHAR(40) NOT NULL)
"""
procedure_definition = """
CREATE OR REPLACE FUNCTION public.titlequery(mid text)
RETURNS text AS
$BODY$
SELECT title FROM Member WHERE member_id=mid;
$BODY$
LANGUAGE sql
"""
connection = pg8000.connect(database='database',
user='username',
password='password',
host='hostname',
port=5432)
cursor = connection.cursor()
# Preparation
cursor.execute(table_definition)
cursor.execute(procedure_definition)
values = ('Information', 'A000042553')
cursor.execute('INSERT INTO Member (title, member_id) VALUES (%s, %s)',
values)
# Reading stored procedure result
parameters = ('A000042553',)
cursor.execute("SELECT titlequery(%s)", parameters)
title = cursor.fetchone()[0]
print(title)
# Cleanup
cursor.close()
connection.close()
給我們
Information
'member_id'對象的外觀如何? –
這是一個字符串,如'A000042553' –
該查詢應該是'cursor.execute(「SELECT titlequery(%s)」%str(member_id))' –