복붙노트

[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. ==============================

    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
    
  2. 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