【问题标题】:trying to autoincrement primarykey using trigger in flask and storing in sqlplus oracle 10g尝试使用烧瓶中的触发器自动增加主键并存储在 sqlplus oracle 10g 中
【发布时间】:2022-01-07 15:26:53
【问题描述】:
'''@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') 
'''

这里我试图从用户和自动增量 fid 获取 fname、电子邮件、密码,这是使用触发器的主键。但我不知道如何将烧瓶中的 fid 传递给自动增量

【问题讨论】:

    标签: database flask triggers sqlplus auto-increment


    【解决方案1】:

    有趣。 10g,真的吗?你在为博物馆工作吗? :-) 当前的生产版本是 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 语句。

    【讨论】:

    • 是的,谢谢您的回复...即使 ik oracle 10g 是旧版本,但不能帮助必须使用我们应该遵循大学所说的内容。我可以使用 sql 终端自动增加 fid,但是当我尝试使用烧瓶插入时出现问题,它直接将空值存储为 fid。我应该进行哪些更改,请尽快回复
    • 您是否尝试按照我的说明更改触发器?这应该可以防止每个工具插入 null
    猜你喜欢
    • 2014-03-06
    • 2012-04-01
    • 1970-01-01
    • 2010-09-23
    • 2016-09-28
    • 2012-04-17
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多