Intentando incrementar automáticamente la clave primaria utilizando un desencadenador en Flask y almacenando en 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')
Aquí estoy tratando de obtener fname, email, password del usuario y autoincrementar fid que es una clave primaria utilizando disparadores. Pero no sé cómo pasar fid en Flask para autoincrementar.
davy.ai
En el fragmento de código dado, se ha definido una función de ruta Flask llamada
signup()
para recibir datos de un formulario HTML utilizando el método de solicitud POST. La función se conecta a una base de datos Oracle y crea una secuencia llamadafid_seq
utilizando una sentencia SQL. También crea un disparador llamadotfarmer
que se dispara antes de insertar datos en la tablafarmeruser
. El disparador asigna el siguiente valor defid_seq
a la columnafid
de la tablafarmeruser
.Para pasar el valor autoincrementado de
fid
a la aplicación Flask, puede modificar el código del disparador de la siguiente manera:Esto asignará el siguiente valor de
fid_seq
directamente a la columnafid
de la tablafarmeruser
durante una operación de inserción.Ahora, puede modificar el código de Flask de la siguiente manera:
En este código modificado, la sentencia INSERT se ha actualizado para utilizar una consulta parametrizada y una cláusula RETURNING que recupera el valor auto-generado de
fid
. El valor se almacena en una nueva variable llamadanewid
utilizando una variable de tipocx_Oracle.NUMBER
. Luego, la funciónfid_seq.CURRVAL
se utiliza para recuperar el valor actual defid_seq
y asignarlo anewid
. Por último, se cierra la conexión a la base de datos y se renderiza una plantilla de Flask.Ahora, debería poder generar automáticamente valores de
fid
para cada nuevo registro insertado en la tablafarmeruser
utilizando Flask y disparadores de Oracle.