我會採取最簡單的SQL函數爲例:如果我複製爲什麼不是psycopg2執行我的任何SQL函數? (IndexError:元組索引超出範圍)
CREATE OR REPLACE FUNCTION skater_name_match(INTEGER,VARCHAR)
RETURNS BOOL AS
$$
SELECT $1 IN (SELECT skaters_skater.competitor_ptr_id FROM skaters_skater
WHERE name||' '||surname ILIKE '%'||$2||'%'
OR surname||' '||name ILIKE '%'||$2||'%');
$$ LANGUAGE SQL;
並粘貼到PSQL(PostgreSQL的外殼),那麼它的執行沒有任何問題。
如果我寫了一個Python代碼所示(帶有一個真正的數據庫名稱和課程的用戶):
import psycopg2
sql_function_above = '''CREATE OR REPLACE FUNCTION skater_name_match(INTEGER,VARCHAR)
RETURNS BOOL AS
$$
SELECT $1 IN (SELECT skaters_skater.competitor_ptr_id FROM skaters_skater
WHERE name||' '||surname ILIKE '%'||$2||'%'
OR surname||' '||name ILIKE '%'||$2||'%');
$$ LANGUAGE SQL;'''
try:
connection = psycopg2.connect("dbname='x' user='x' host='localhost' password='x'");
except:
print "I am unable to connect to the database"
cursor = connection.cursor()
cursor.execute(sql_function_above)
它似乎執行(它不給我一個錯誤)但是當我查看數據庫時,函數不在那裏。
當我嘗試把它變成一個應用程序/ SQL/model.sql文件我碰到下面的錯誤執行syncdb期間執行在Django代碼:
IndexError: tuple index out of range
當我嘗試寫我自己的管理。 py命令會執行sql,我得到相同的錯誤。
這是怎麼回事?非常感謝任何能夠說明這一點的人:)當談到Python和Django時,我仍然是一個新手,所以我可能忽略了一些明顯的東西。
您是否可以在「遊標」中添加您正在執行的實際語句。執行(sql_function_above)「(或者顯示你定義'sql_function_above'的地方,如果你真的想用這個標識符) – 2009-11-14 17:18:47
向我們展示你如何在你的python代碼中定義sql_function_above' – nos 2009-11-14 18:44:12
對不起,這是我的簡化。嘗試以各種不同的方式編寫變量,我也嘗試從sql文件中讀取文本,所有這些都產生了相同的錯誤,現在我編寫變量編輯到原始問題中的許多方法之一。回覆 - 這是我第一次使用stackoverflow.com,來自你們的回覆的樂於助人和速度是驚人的:) – 2009-11-16 12:09:12