Python/postgres/psycopg2: 방금 삽입된 행의 ID 가져오기
Python과 psycopg2를 사용하여 postgres와 인터페이스하고 있습니다.
행을 삽입할 때...
sql_string = "INSERT INTO hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ");"
cursor.execute(sql_string)
방금 입력한 행의 ID를 어떻게 얻을 수 있습니까?시도 중:
hundred = cursor.fetchall()
오류 반환, 사용 중RETURNING id
:
sql_string = "INSERT INTO domes_hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ") RETURNING id;"
hundred = cursor.execute(sql_string)
단순 신고None
.
업데이트: 업데이트도 마찬가지입니다.currval
(이 명령을 postgres에 직접 사용하더라도):
sql_string = "SELECT currval(pg_get_serial_sequence('hundred', 'id'));"
hundred_id = cursor.execute(sql_string)
누가 조언해 줄 수 있습니까?
감사합니다!
cursor.execute("INSERT INTO .... RETURNING id")
id_of_new_row = cursor.fetchone()[0]
그리고 값이 포함된 SQL 문자열을 수동으로 작성하지 마십시오.값을 개별적으로 전달할 수 있으므로 이스케이프할 필요가 없고 SQL 주입이 불가능합니다.
sql_string = "INSERT INTO domes_hundred (name,name_slug,status) VALUES (%s,%s,%s) RETURNING id;"
cursor.execute(sql_string, (hundred_name, hundred_slug, status))
hundred = cursor.fetchone()[0]
자세한 내용은 싸이코펙 문서를 참조하십시오. http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries
저도 비슷한 문제가 있어서 오게 되었는데, 아직 RETURNING ID 조항을 지원하지 않는 Postgres-XC를 사용하고 있습니다.이 경우 다음을 사용할 수 있습니다.
cursor.cursor.cursor……에 삽입)cursor.execute('LASTVAL() 선택')lastid = 커서입니다.마지막 발을 가져오다[마지막 발]
혹시라도 누군가에게 도움이 되었을 때를 대비해서요!
RETURN 조항 http://www.postgresql.org/docs/8.3/static/sql-insert.html 을 고려해 보십시오.
저에게는 도둑 마스터의 대답도 제이미 브라운의 대답도 통하지 않았습니다.저에게 효과가 있었던 것은 이 두 가지를 혼합한 것입니다. 저는 여기서 다른 사람에게 도움이 될 수 있도록 대답하고 싶습니다.
제가 해야 할 일은:
cursor.execute('SELECT LASTVAL()')
id_of_new_row = cursor.fetchone()[0]
진술서lastid = cursor.fetchone()['lastval']
내겐 효과가 없었어, 심지어 그 후에도.cursor.execute('SELECT LASTVAL()')
진술서id_of_new_row = cursor.fetchone()[0]
혼자서도 효과가 없었습니다.
제가 뭔가를 놓친 것 같아요.
도둑 마스터의 접근 방식은 두 가지 모두에게 효과가 있었습니다.INSERT
그리고.UPDATE
명령을 실행합니다.
한다면cursor.fetchone()
를 실행한 후 커서에서 호출됩니다.INSERT
/UPDATE
명령이지만 반환 값이 부족했습니다(RETURNING
조항) 예외가 제기될 것입니다.ProgrammingError('no results to fetch'))
insert_query = """
INSERT INTO hundred (id, name, name_slug, status)
VALUES (DEFAULT, %(name)s, %(name_slug)s, %(status)s)
RETURNING id;
"""
insert_query_values = {
"name": "",
"name_slug": "",
"status": ""
}
connection = psycopg2.connect(host="", port="", dbname="", user="", password="")
try:
with connection:
with connection.cursor() as cursor:
cursor.execute(insert_query, insert_query_values)
num_of_rows_affected = cursor.rowcount
new_row_id = cursor.fetchone()
except psycopg2.ProgrammingError as ex:
print("...", ex)
raise ex
finally:
connection.commit()
connection.close()
언급URL : https://stackoverflow.com/questions/5247685/python-postgres-psycopg2-getting-id-of-row-just-inserted
'programing' 카테고리의 다른 글
C#/VB.NET에서 T-SQL CAST 디코딩 (0) | 2023.05.29 |
---|---|
새 프로젝트를 만들 때마다 이클립스가 앱compat v7 라이브러리 지원을 자동으로 추가하는 이유는 무엇입니까? (0) | 2023.05.29 |
Express 기능에서 "res" 및 "req" 매개 변수는 무엇입니까? (0) | 2023.05.29 |
VB의 With 문에 해당하는 C#은 무엇입니까? (0) | 2023.05.29 |
MongoDB 및 코드 점화기 (0) | 2023.05.24 |