#python #sql #postgresql #psycopg2
#python #sql #postgresql #psycopg2
Вопрос:
Привет, я пытаюсь разработать функциональность вставки с использованием python и postgress sql. Чего я пытаюсь добиться, так это того, что при вставке значения идентификатор должен автоматически увеличиваться, поскольку я установил его таким образом. Но все равно выдает ошибку, отличную от нуля. См. Ошибку ниже
Это мой текущий код:
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()
Ошибка, которую я получаю:
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).
Вот как я создал свою таблицу
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()
Как мне избежать ошибки, чтобы мой код принимал все значения и только автоматически увеличивал столбец id на основе инструкции insert
Ответ №1:
Используйте тип данных SERAIL в определении таблицы.
Это сделает автоматическое увеличение для вас.
id SERIAL PRIMARY KEY
Подробнее см. Здесь.
Ответ №2:
Начиная с Postgres v10, предпочтительным методом является определение вашего id
как сгенерированного столбца идентификаторов.
create table carinventory(
id integer generated always as identity
primary key
, car_make text
, car_model text
, year integer
, first_owner boolean
, vinnumber varchar(17)
) ;