尝试使用 flask 中的触发器自动增加主键并存储在 sqlplus oracle 10g 中
trying to autoincrement primarykey using trigger in flask and storing in sqlplus oracle 10g
'''@app.route("/indexf",methods=["POST","GET"])
def signup():
conn=cx_Oracle.connect(user="SYSTEM",password="bnm")
cur= conn.cursor()
a1=""""create sequence fid_seq"""
ass=""" create trigger tfarmer
before insert on farmeruser
for each row
begin
select fid_seq.nextval
into :new.fid
from dual
end;
/"""
if request.method == "POST":
fname=request.form.get('fname')
email=request.form.get('email')
password=request.form.get('password')
encpassword=generate_password_hash(password)
execute="""INSERT INTO farmeruser VALUES (:fid,:fname,:email,:password)"""
cur.execute(execute, {'fid':fid,'fname':fname, 'email':email, 'password':encpassword})
conn.commit()
return render_template('indexf.html')
'''
我在这里尝试从用户获取 fname、电子邮件、密码和自动增量 fid,它是使用触发器的主键。但我不知道如何将 flask 中的 fid 传递给自动增量
有意思。 10克,真的吗?你在博物馆工作吗? :-) 当前的生产版本是 19c,10g 已经有 20 年的历史了……对不起,开个低俗的玩笑。
所以你的触发器有效,如果你想明确设置 fid 的值(这就是我理解你的问题的方式)你必须更改触发器:
...
begin
IF :new.fid IS NULL THEN
SELECT fid_seq.nextval INTO :new.fid FROM dual;
END IF;
END;
如果您决定更改为更新的 Oracle 版本,您可以这样做
:new.fid:= fid_seq.nextval;
而不是 SELECT 语句。
'''@app.route("/indexf",methods=["POST","GET"])
def signup():
conn=cx_Oracle.connect(user="SYSTEM",password="bnm")
cur= conn.cursor()
a1=""""create sequence fid_seq"""
ass=""" create trigger tfarmer
before insert on farmeruser
for each row
begin
select fid_seq.nextval
into :new.fid
from dual
end;
/"""
if request.method == "POST":
fname=request.form.get('fname')
email=request.form.get('email')
password=request.form.get('password')
encpassword=generate_password_hash(password)
execute="""INSERT INTO farmeruser VALUES (:fid,:fname,:email,:password)"""
cur.execute(execute, {'fid':fid,'fname':fname, 'email':email, 'password':encpassword})
conn.commit()
return render_template('indexf.html')
'''
我在这里尝试从用户获取 fname、电子邮件、密码和自动增量 fid,它是使用触发器的主键。但我不知道如何将 flask 中的 fid 传递给自动增量
有意思。 10克,真的吗?你在博物馆工作吗? :-) 当前的生产版本是 19c,10g 已经有 20 年的历史了……对不起,开个低俗的玩笑。
所以你的触发器有效,如果你想明确设置 fid 的值(这就是我理解你的问题的方式)你必须更改触发器:
...
begin
IF :new.fid IS NULL THEN
SELECT fid_seq.nextval INTO :new.fid FROM dual;
END IF;
END;
如果您决定更改为更新的 Oracle 版本,您可以这样做
:new.fid:= fid_seq.nextval;
而不是 SELECT 语句。