我将以最简单的 SQL 函数为例:
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 的 shell)中,那么它可以毫无问题地执行。
如果我写一段这样的 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)
它似乎可以执行(它没有给我错误),但是当我查看数据库时,该功能不存在。
当我尝试通过将代码放入 app/sql/model.sql 文件中来执行 Django 中的代码时,我在 syncdb 期间收到以下错误:
IndexError: tuple index out of range
当我尝试编写自己的执行 sql 的 manage.py 命令时,我得到了同样的错误。
这里发生了什么?非常感谢任何可以对此有所了解的人:) 当谈到 Python 和 Django 时,我仍然是新手,所以我可能忽略了一些明显的事情。