Hola, estoy tratando de desarrollar funcionalidad de inserción utilizando Python y PostgreSQL.
Hola, estoy tratando de desarrollar la funcionalidad de inserción utilizando Python y PostgreSQL. Lo que estoy tratando de lograr es que cuando inserte un valor, el id se incremente automáticamente como lo he configurado. Pero aún me da un error de “non null”. A continuación puedes ver el error:
Este es mi código actual:
def insert(car_make,car_model,year,first_owner,vinnumber):
conn=psycopg2.connect("dbname='Car_Inventory_db' user='postgres' password='password' host='localhost' port='5432'")
cur=conn.cursor()
cur.execute("INSERT into carInventory(car_make,car_model,year,first_owner,vinnumber) VALUES (%s, %s, %s, %s, %s)", (car_make,car_model,year,first_owner,vinnumber))
conn.commit()
conn.close()
Error que estoy recibiendo:
psycopg2.errors.NotNullViolation: null value in column "id" of relation "carinventory" violates not-null constraint
DETAIL: Failing row contains (null, Honda, Civic, 2003, true, 3sdfSKHAN).
Así es como he creado mi tabla:
def connect():
conn=psycopg2.connect("dbname='Car_Inventory_db' user='postgres' password='password' host='localhost' port='5432'")
cur=conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS carInventory(
id integer PRIMARY KEY,
car_make text,
car_model text,
year integer,
first_owner boolean,
vinnumber varchar(17)
)
""")
conn.commit()
conn.close()
¿Cómo puedo evitar este error para que mi código acepte todos los valores y solo incremente automáticamente la columna id basándose en la declaración de inserción?
davy.ai
Para evitar el error, debes modificar tu declaración INSERT para excluir la columna id para que pueda ser autoincrementada por la base de datos. Aquí te mostramos cómo puedes modificar tu función insert:
En este código modificado, hemos eliminado la columna id de la declaración INSERT y hemos agregado la cláusula
RETURNING id
al final para que el id recién generado sea devuelto por la base de datos. También obtenemos elid
delcursor
y lo devolvemos desde la función.Con esta modificación, puedes llamar a la función
insert
y esta insertará los valores y generará un nuevo id para el registro. Por ejemplo:Esto insertará un nuevo registro con los valores dados y devolverá el
id
recién generado para el registro.