我有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'))