How to correctly set AUTO INCREMENT fo a column in SQLite, using Python?

前端 未结 4 871
轻奢々
轻奢々 2021-02-04 04:33

I have been trying with the below code:

import sqlite3
data_person_name = [(\'Michael\', \'Fox\'),
                    (\'Adam\', \'Miller\'),
                           


        
相关标签:
4条回答
  • 2021-02-04 04:58

    Try like this:

    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 讨论(0)
  • 2021-02-04 05:05

    Replace the first ? in executemany statement with null.

    So the following line can be rewritten:

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

    as

    c.executemany('INSERT INTO q1_person_name VALUES (null,?,?)', data_person_name)
    
    0 讨论(0)
  • 2021-02-04 05:13

    In SQLite, INTEGER PRIMARY KEY column is auto-incremented. There is also an AUTOINCREMENT keyword. When used in INTEGER PRIMARY KEY AUTOINCREMENT, a slightly different algorithm for Id creation is used.

    #!/usr/bin/python
    
    import sqlite3
    data_person_name = [('Michael', 'Fox'),
                        ('Adam', 'Miller'),
                        ('Andrew', 'Peck'),
                        ('James', 'Shroyer'),
                        ('Eric', 'Burger')]
    
    con = sqlite3.connect(":memory:")
    
    with con:
    
        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)
    

    This code now works OK.

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

    When using auto-increment, we have to explicitly state the column names, omitting the one that is auto-incremented.

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

    This is the output of the code example.

    0 讨论(0)
  • 2021-02-04 05:15

    It seems that you've done it already. So there's no need to reference that field when you insert.

    INSERT INTO q1_person_name (first_name, last_name) VALUES (?,?)
    
    0 讨论(0)
提交回复
热议问题