source

Python을 사용하여 SQLite에 행을 삽입한 후 삽입된 ID를 검색하는 방법은 무엇입니까?

factcode 2022. 10. 3. 17:17
반응형

Python을 사용하여 SQLite에 행을 삽입한 후 삽입된 ID를 검색하는 방법은 무엇입니까?

Python을 사용하여 SQLite에 행을 삽입한 후 삽입된 ID를 검색하는 방법은 무엇입니까?제 테이블은 다음과 같습니다.

id INT AUTOINCREMENT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(50)

예제 데이터가 포함된 새 행을 삽입합니다.username="test"그리고.password="test"생성된 ID는 어떻게 하면 안전하게 취득할 수 있을까요?이것은 웹 사이트 솔루션에서 두 사람이 동시에 데이터를 삽입할 수 있습니다.마지막 읽기 행을 얻을 수 있다는 것은 알지만, 그건 안전한 거래라고 생각하지 않습니다.누가 조언 좀 해줄래?

cursor.lastrowid를 사용할 수 있습니다("옵션 DB API 확장" 참조).

connection=sqlite3.connect(':memory:')
cursor=connection.cursor()
cursor.execute('''CREATE TABLE foo (id integer primary key autoincrement ,
                                    username varchar(50),
                                    password varchar(50))''')
cursor.execute('INSERT INTO foo (username,password) VALUES (?,?)',
               ('test','test'))
print(cursor.lastrowid)
# 1

두 사람이 동시에 삽입하는 경우 서로 다른 것을 사용하는 경우cursors,cursor.lastrowid를 반환하다id마지막 줄에 대해서cursor삽입:

cursor.execute('INSERT INTO foo (username,password) VALUES (?,?)',
               ('blah','blah'))

cursor2=connection.cursor()
cursor2.execute('INSERT INTO foo (username,password) VALUES (?,?)',
               ('blah','blah'))

print(cursor2.lastrowid)        
# 3
print(cursor.lastrowid)
# 2

cursor.execute('INSERT INTO foo (id,username,password) VALUES (?,?,?)',
               (100,'blah','blah'))
print(cursor.lastrowid)
# 100

주의:lastrowid돌아온다None한 번에 여러 행을 삽입할 때executemany:

cursor.executemany('INSERT INTO foo (username,password) VALUES (?,?)',
               (('baz','bar'),('bing','bop')))
print(cursor.lastrowid)
# None

모든 크레딧은 @Martijn Pieters 코멘트:

다음 기능을 사용할 수 있습니다.

last_insert_rowid()함수는 다음 값을 반환합니다.ROWID함수를 호출한 데이터베이스 연결의 마지막 행 삽입.last_insert_rowid()SQL 함수는 다음 웹 사이트의sqlite3_last_insert_rowid()C/C++ 인터페이스 기능.

SQLite 3.35의RETURNING절:

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  first_name TEXT,
  last_name TEXT
);

INSERT INTO users (first_name, last_name)
VALUES ('Jane', 'Doe')
RETURNING id;

삽입된 행의 요청된 열을 반환합니다.INSERT,UPDATE그리고.DELETE진술들.Python 사용:

cursor.execute('INSERT INTO users (first_name, last_name) VALUES (?,?)'
               ' RETURNING id',
               ('Jane', 'Doe'))
row = cursor.fetchone()
(inserted_id, ) = row if row else None

언급URL : https://stackoverflow.com/questions/6242756/how-to-retrieve-inserted-id-after-inserting-row-in-sqlite-using-python

반응형