2014-10-30 13 views
9

Tôi đã cố gắng với mã dưới đây:Làm thế nào để thiết lập chính xác AUTO INCREMENT cho một cột trong SQLite, sử dụng Python?

import sqlite3 
data_person_name = [('Michael', 'Fox'), 
        ('Adam', 'Miller'), 
        ('Andrew', 'Peck'), 
        ('James', 'Shroyer'), 
        ('Eric', 'Burger')] 
con = sqlite3.connect(":memory:") 
c = con.cursor() 
c.execute('''CREATE TABLE q1_person_name 
      (name_id integer auto_increment primary key, 
       first_name varchar(20) NOT NULL, 
       last_name varchar(20) NOT NULL)''') 
c.executemany('INSERT INTO q1_person_name VALUES (?,?,?)', data_person_name) 
for row in c.execute('SELECT * FROM q1_person_name'): 
    print row 

ai đó có thể giúp tôi trong việc đưa ra name_id tự động tăng lên?

Trả lời

11

Cột SQLite, INTEGER PRIMARY KEY được tự động tăng lên. Ngoài ra còn có một từ khóa AUTOINCREMENT. Khi được sử dụng trong INTEGER PRIMARY KEY AUTOINCREMENT, một thuật toán hơi khác nhau để tạo Id được sử dụng .

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sqlite3 
data_person_name = [('Michael', 'Fox'), 
        ('Adam', 'Miller'), 
        ('Andrew', 'Peck'), 
        ('James', 'Shroyer'), 
        ('Eric', 'Burger')] 

con = sqlite3.connect(":memory:") 
c = con.cursor() 

c.execute('''CREATE TABLE q1_person_name 
      (name_id INTEGER PRIMARY KEY, 
       first_name varchar(20) NOT NULL, 
       last_name varchar(20) NOT NULL)''') 
c.executemany('INSERT INTO q1_person_name(first_name, last_name) VALUES (?,?)', data_person_name) 

for row in c.execute('SELECT * FROM q1_person_name'): 
    print row 

Mã này hiện hoạt động OK.

c.executemany('INSERT INTO q1_person_name(first_name, last_name) VALUES (?,?)', data_person_name) 

Khi sử dụng tính năng tự động tăng, chúng ta phải nói rõ tên cột, bỏ qua một đó là tính năng tự động tăng lên.

$ ./test.py 
(1, u'Michael', u'Fox') 
(2, u'Adam', u'Miller') 
(3, u'Andrew', u'Peck') 
(4, u'James', u'Shroyer') 
(5, u'Eric', u'Burger') 

Đây là đầu ra của ví dụ mã.

+0

Thanks a lot @Jan Bodnar – Avi

0

Hãy thử như thế này:

c.execute('''CREATE TABLE q1_person_name 
     (name_id integer primary key AUTOINCREMENT, 
      first_name varchar(20) NOT NULL, 
      last_name varchar(20) NOT NULL)''') 
0

Dường như bạn đã làm nó rồi. Vì vậy, không cần phải tham khảo trường đó khi bạn chèn.

INSERT INTO q1_person_name (first_name, last_name) VALUES (?,?) 
+0

Khi tôi làm điều này nó asssigns' cái name_id' để ** Không ** – Avi

0

Thay thế thiết bị đầu tiên? trong câu lệnh thực thi với null.

Vì vậy, các dòng sau đây có thể được viết lại:

c.executemany ('INSERT INTO GIÁ TRỊ q1_person_name (,,)??', Data_person_name)

như

c.executemany (' INSERT INTO GIÁ TRỊ q1_person_name (null,?,?)', data_person_name)

Các vấn đề liên quan