2014-10-30 10 views
9

aşağıda kod ile çalışıyorlar:AUTO INCREMENT, SQLite'de Python kullanarak bir sütuna nasıl doğru bir şekilde ayarlanır?

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 

birileri name_id otomatik olarak arttırılır yapımında bana yardımcı olabilir?

cevap

11

SQLite'ta olarak, INTEGER PRIMARY KEY kolon otomatik artırılır. Ayrıca bir AUTOINCREMENT anahtar kelimesi de vardır. INTEGER PRIMARY KEY AUTOINCREMENT'da kullanıldığında, Kimlik oluşturma için biraz farklı bir algoritma kullanılır.

#!/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 

Bu kod şimdi çalışıyor. otomatik artış kullanırken

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

biz açıkça otomatik artan bir remplacement, sütun adları belirtmek gerekir.

$ ./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') 

Bu, kod örneğinin çıktısıdır.

+0

Teşekkürler alot @Jan Bodnar – Avi

0

böyle deneyin:

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

Size bunu çoktan gibi görünüyor. Yani eklediğinizde bu alana başvurmaya gerek yok.

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

Bunu yaptığımda' name_id 'ifadesini atar ** Yok ** – Avi

0

İlkini değiştir? null ile executemany deyiminde.

Yani aşağıdaki satırı yazılabilir:

c.executemany ('(q1_person_name VALUES INSERT INTO)???' Data_person_name)

olarak c.executemany (' INSERT INTO q1_person_name VALUES (null,?,?) ', Data_person_name)

İlgili konular