存储过程没有错误,但不在postgresql中插入数据

时间:2018-06-19 04:45:41

标签: python postgresql flask-sqlalchemy flask-wtforms

我有Postgres作为我的数据库。我创建了一个将数据插入postgres数据库的函数(下面的代码)。 MIt不会返回任何错误,但它也不会向我的数据库插入任何内容。我应该在这里改变什么?

我有一个模型类(在一个单独的文件中)。要使用此模型类(下面的代码),我将在我的app.py中导入它。

model.py

from sqlalchemy import create_engine

import os


class DBconn:
    def __init__(self):
        engine = create_engine('postgresql://postgres:admin@127.0.0.1:5432/backend', echo=False)
        self.conn = engine.connect()
        self.trans = self.conn.begin()

    def getcursor(self):
        cursor = self.conn.connection.cursor()
        return cursor

    def dbcommit(self):
        self.trans.commit()

    def dbexecute(self, query, parameters):
        self.conn.execute(self, query, parameters)

这是我的postgres功能:

功能

create or replace function newcounselor(par_username text, par_password text, par_firstname  text, par_middleinitial text, par_lastname text, par_contact text, par_code text, par_affiliation text, par_city text, par_done boolean) returns text as
  $$
    declare
      loc_code text;
      loc_res text;
    begin
       select into loc_code code from counselors where code = par_code ;
       if loc_code isnull then

         insert into counselors (firstname, middleinitial, lastname, contact, code, affiliation, city, done) values (par_firstname, par_middleinitial, par_lastname, par_contact, par_code, par_affiliation, par_city, par_done);
         insert into users (username, password, code) values (par_username, par_password, par_code);
         loc_res = 'OK';

       else
         loc_res = 'ID EXISTED';
       end if;
       return loc_res;
    end;
  $$
   language 'plpgsql';

在我的 app.py 中,我使用此python函数执行该函数:

def insert(sp, params, commit=True):
    try:
        dbo = DBconn()
        cursor = dbo.getcursor()
        cursor.callproc(sp, params)
        cursor.callproc(dbo.dbexecute())

        if commit:
            dbo.dbcommit()
            return
        else:
            return 'Error inserting data'
    except Exception as e:
        return str(e)

然后,为了使用python函数插入数据,我以这种方式使用它(用户名,密码等来自我的变量..我已经测试了这些变量,它包含了我的用户的输入......:

insert("newcounselor", (username, password, firstname, middleinitial, 
lastname, contact, code, affiliation, city))
flash('You are now registered', 'success')
redirect(url_for('login'))

0 个答案:

没有答案