홈>
다음 표가있는 postgres 데이터베이스가 있습니다 :
CREATE TABLE stocks
(
id serial PRIMARY KEY
);
및 다음과 같은 다른 테이블 :
CREATE TABLE stock_attributes
(
id serial PRIMARY KEY,
market_id TEXT,
short_name TEXT,
full_name TEXT,
isin TEXT,
stock_id serial REFERENCES stocks(id)
);
이것은 정규화를 시도한 것이므로 잘못된 경우 용서하십시오.하지만
stocks
에 새 행을 삽입하려고합니다.
표를 입력 한 다음 두 번째 표에 다른 삽입물의 ID를 사용하십시오.
INSERT INTO stocks DEFAULT VALUES RETURNING id;
쿼리가 진행되고 새 ID가 반환되지만 stock_attributes 테이블에서 두 번째 쿼리를 실행하면 관계 ID가 stocks 테이블에 존재하지 않는다는 오류가 발생합니다.
INSERT INTO stock_attributes AS a (market_id, short_name, full_name, isin, stock_id) VALUES (%s, %s, %s, %s, %s);
이것은 실패한다
insert or update on table "stock_attributes" violates foreign key constraint "stock_attributes_stock_id_fkey"
DETAIL: Key (stock_id)=(3) is not present in table "stocks".
파이썬과 함께 psycopg2를 사용하고 있습니다.
이것은 postgres 파이썬 가이드에서 복사 한 코드입니다 :
def execute(sql,args):
conn = None
try:
# read database configuration
params = config()
# connect to the PostgreSQL database
conn = psycopg2.connect(**params)
# create a new cursor
cur = conn.cursor()
cur.execute(sql, args)
conn.commit()
# close communication with the database
cur.close()
print("SQL executed")
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
def execute_and_return(sql, args):
""" insert a new vendor into the vendors table """
conn = None
rows = None
try:
# read database configuration
params = config()
# connect to the PostgreSQL database
conn = psycopg2.connect(**params)
# create a new cursor
cur = conn.cursor()
cur.execute(sql, args)
rows = cur.fetchall()
# close communication with the database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
return rows
- 답변 # 1
관련 자료
- 선택에 따라 한 테이블에서 다른 테이블로 mysql 삽입
- java - 동일한 테이블의 INSERT INTO에서 중복 방지
- sql - 특정 패턴으로 한 테이블의 행을 다른 테이블의 열에 삽입
- sql - 해당 열에 다른 값이없는 경우에만 테이블 열 업데이트
- r - 열 이름이 다른 dbWriteTable 일 때 SQLite 테이블에 데이터 프레임을 삽입 할 수 없습니다
- SQLAlchemy를 사용하여 Snowflake 데이터베이스 테이블에 데이터 삽입 시도
- sql - 자동 증가없이 증가 열이있는 테이블에 행 삽입
- postgresql - 기존보다 점이 하나 더있는 테이블에 전자 메일을 삽입 할 수없는 이유는 무엇입니까?
- mysql - SUM 및 GROUP BY를 사용하여 열을 테이블에 삽입
- sql - 다른 테이블에 존재하지 않는 레코드 가져 오기
- mysql - 다른 테이블의 데이터를 자동으로 테이블에 삽입하는 방법은 무엇입니까?
- c# - 시작일과 종료일 사이의 모든 날짜를 표에 삽입하려면 어떻게해야합니까?
- r - 대치 된 데이터의 새 행을 그룹별로 데이터 테이블에 삽입
- PHP는 mysql 테이블에 데이터를 삽입하지 않습니다
- php - mysql 테이블에 고유 한 이메일을 삽입하는 방법
- postgresql - 실수로 테이블에서 모든 데이터를 감지했습니다 루프 psql을 사용하여 더미 데이터를 테이블에 삽입하십시오
- sql - 대상 테이블에 해당 행이없는 경우에만 한 테이블의 행을 다른 테이블로 복사하는 방법
- sql - Python에서 테이블에 동적으로 삽입 만들기
- HTML 테이블에 파이썬 목록을 삽입하는 방법은 무엇입니까?
- mysql - 테이블의 변수에서 값을 가져오고 새 테이블에 대한 추가 변수가있는 새 테이블에 INSERT가 작동하지 않습니까?
관련 질문
- python : django.db.utils.DataError: 가변형 문자에 대한 값이 너무 깁니다(30). heroku postgresql에서 마이그레이션하는 동안 이 오류가 발생합니다.
- python : PostgreSQL -열 형식은 어떻게 얻습니까?
- postgresql : Nosetest는 travis-ci에서 마이그레이션한 후 postgres에 인증할 수 없습니다.
- Python psycopg2가 uuid 배열을 사용하여 쿼리하는 방법
- postgresql : Python 3.9용 Postgres에 대한 대안이 있습니까?
- python : aws 람다에서 stringIO()에 속성 오류가 없음을 수정하려면 어떻게 해야 합니까?
- psycopg2 및 pandas의 조건부 쿼리
- python : 삽입은 "마지막 작업에서 결과를 생성하지 못했습니다"를 반환합니다.
- postgreSQL 테이블에 열 이름이 일치하는 csv 데이터 행을 삽입하는 방법은 무엇입니까?
- Python에서 키-값 저장소로 postgresql을 사용하는 방법은 무엇입니까?
stocks
에 대한 주요 참조 테이블이 잘못되었습니다. 당신은 가지고 있습니다 :필요할 때 :
직렬은integer
유형의 시퀀스를 작성합니다. 열 유형을integer
로 설정합니다.nextval("<generated sequence name>")
의 기본값 .serial
에서 유형을 변경하면integer
로 외래 키에서는 작동해야합니다.