반응형
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
두 사람이 동시에을 삽입하는 경우 서로 다른 cursor
s를 사용 하는 한 삽입 한 마지막 행에 대해 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
반응형
'programing tip' 카테고리의 다른 글
std :: move와 std :: forward의 차이점은 무엇입니까? (0) | 2020.06.08 |
---|---|
java.sql.PreparedStatement에서 쿼리 가져 오기 (0) | 2020.06.08 |
왜“b <a? (0) | 2020.06.08 |
VBA에서 동시에 변수를 선언하고 할당 할 수 있습니까? (0) | 2020.06.08 |
pip install : 해당 디렉토리의 권한과 소유자를 확인하십시오 (0) | 2020.06.08 |