[PYTHON] 어떻게 파이썬을 사용하여 SQLite에 행을 삽입 한 후 삽입 된 ID를 검색 할 수 있습니까?
PYTHON어떻게 파이썬을 사용하여 SQLite에 행을 삽입 한 후 삽입 된 ID를 검색 할 수 있습니까?
어떻게 파이썬을 사용하여 SQLite에 행을 삽입 한 후 삽입 된 ID를 검색 할 수 있습니까? 나는 이런 식탁을 가지고있다.
id INT AUTOINCREMENT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(50)
예제 데이터 username = "test"및 password = "test"를 사용하여 새 행을 삽입합니다. 생성 된 ID를 트랜잭션으로 안전하게 검색하려면 어떻게해야합니까? 이것은 두 사람이 동시에 데이터를 삽입하는 웹 사이트 솔루션을위한 것입니다. 내가 마지막으로 읽은 행을 얻을 수 있다는 것을 알고 있지만 트랜잭션 안전하다고는 생각하지 않습니다. 누군가가 조언을 해줄 수 있습니까?
해결법
-
==============================
1.cursor.lastrowid를 사용할 수 있습니다 ( "선택적 DB API 확장"참조).
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
두 사람이 동시에 다른 커서를 사용하는 경우 cursor.lastrowid는 커서가 삽입 된 마지막 행의 ID를 반환합니다.
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
executemany를 사용하여 한 번에 둘 이상의 행을 삽입하면 lastrowid가 None을 반환합니다.
cursor.executemany('INSERT INTO foo (username,password) VALUES (?,?)', (('baz','bar'),('bing','bop'))) print(cursor.lastrowid) # None
from https://stackoverflow.com/questions/6242756/how-to-retrieve-inserted-id-after-inserting-row-in-sqlite-using-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 새로운 LIST에 두 개의 LIST 값 합계를 더한다. (0) | 2018.10.10 |
---|---|
[PYTHON] 평면 목록에 중복 된 항목이 있는지 어떻게 확인합니까? (0) | 2018.10.10 |
[PYTHON] 모든 목록 요소에서 int () 함수를 호출 하시겠습니까? (0) | 2018.10.10 |
[PYTHON] stdin에서 암호 읽기 (0) | 2018.10.10 |
[PYTHON] 문자열이 목록의 문자열 중 하나로 끝나는 지 확인하십시오. (0) | 2018.10.10 |