SORU
5 HAZİRAN 2011, Pazar


Nasıl SQLite Python kullanarak satırı ekledikten sonra eklenen kimliği almak için?

Nasıl SQLite Python kullanarak satırı ekledikten sonra eklenen kimliği almak için? Gibi bir tablo var

id int autoincrement primary key,
username varchar(50),
password varchar(50)

ve ben örnek username="test" password="test" ile yeni bir satır ekleyin. Nasıl oluşturulur kimliği almak için ama bu işlem güvenli (web sitesidir ve iki kişi aynı anda ekleme yeni bir kullanıcı, biliyorum bu işlem güvenli değil geçen ama okumak olabilir)? Herkes bana bazı tavsiyeler verebilir?

CEVAP
5 HAZİRAN 2011, Pazar


cursor.lastrowid kullanabilirsiniz ("İsteğe bağlı DB API Uzantıları"):

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

Eğer iki kişi ekleme aynı anda, sürece onlar kullanarak farklı cursors cursor.lastrowid dönüş id son satır cursor eklenen:

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 bir zamanlar executemany: birden fazla satır eklediğinizde None verdiğini unutmayın

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blendtec

    Blendtec

    30 EKİM 2006
  • Need for Speed

    Need for Spe

    8 ŞUBAT 2006
  • RayperEnglishKnight

    RayperEnglis

    24 Kasım 2008