我想通过Django后端调用安装在PostgreSQL数据库中的存储过程。
根据this stack question,为了从Django调用一个过程,我们必须在一个名为的文件中输入它:test.py,放在我们的迁移文件夹中,如下所示:
from django.db import migrations
SQL = """
CREATE OR REPLACE PROCEDURE get_input_file()
AS $$
CREATE TABLE TEMP(RowData VARCHAR(4000));
$$
LANGUAGE SQL;
"""
class Migration(migrations.Migration):
dependencies = [
('api', '0001_initial'),
]
operations = [migrations.RunSQL(SQL)]
注:python test.py
没有任何结果。python manage.py migrate api
导致
Operations to perform:
Apply all migrations: api
Running migrations:
No migrations to apply.
然后根据this guide,我们在后端www.example.com中添加views.py了以下代码:
# apply stored procedure
import psycopg2
import os
conn = psycopg2.connect(
host=os.getenv('TDB_HOST'),
database=os.getenv('TDB_NAME'),
user=os.getenv('TDB_USER'),
password=os.getenv('TDB_PASSWORD')
)
cur = conn.cursor()
cur.execute("CALL get_input_file();")
conn.commit()
我们预期此测试将成功调用该过程。我们得到:
procedure get_input_file() does not exist
LINE 1: CALL get_input_file();
^
HINT: No procedure matches the given name and argument types. You might need to add explicit type casts.
1条答案
按热度按时间6fe3ivhb1#
我通过以下步骤成功地解决了这个问题:
1.在数据库本身中创建过程(通过GUI PgAdmin)
1.使用
psycopg2
调用该过程:不需要迁移。不需要
test.py
文件。