programing tip

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

itbloger 2020. 6. 8. 21:02
반응형

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를 반환합니다 .idcursor

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

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

반응형