Идентификационный тег не автоматически увеличивает числа в Python - PullRequest
1 голос
/ 18 июня 2019

Я изучаю Python и пытаюсь повторить то, что делают онлайн-уроки.Я пытаюсь создать настольное приложение Python, где данные хранятся в Postgresql.код добавлен ниже,

 `cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title text, author text, year integer, isbn integer)")`

проблема с (id INTEGER PRIMARY KEY), когда я выполняю код, который не показывает ни одного вместо первого индекса.Я хочу показать цифры.помогите пожалуйста

это для Python 3.7.3, psycopg2 == 2.8.3,

def connect():
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY,                    
title text, author text, year integer, isbn integer)")
conn.commit()
conn.close()

ожидаемый результат - автоинкремент чисел в первом индексе, где, как сейчас показаноНИКТО.ниже снова представлен настоящий и ожидаемый результат.нет название автор год isbn 01 название автор год isbn

Ответы [ 2 ]

5 голосов
/ 18 июня 2019

потому что вы говорите Я вставляю данные вручную , а не

def connect():
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY,                    
title text, author text, year integer, isbn integer)")
conn.commit()
conn.close()

Попробуйте использовать

def connect():
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("SELECT * FROM books")
for row in cur:
    print(row[0],row[1],row[2],row[3],row[4])
conn.commit()
conn.close()
3 голосов
/ 18 июня 2019

Попытка использовать Cursor execute не будет работать для оператора CREATE и, следовательно, для NONE.Ниже приведен пример.

Re Индексы: -

Не будет конкретного индекса, поскольку column_name INTEGER PRIMARY KEY особенный, поскольку он определяет столбец как псевдоним столбца rowid, который являетсяспециальный внутренний индекс, использующий базовый механизм хранения B-дерева.

Если строка вставлена, то если для столбца не указано значение (например, INSERT INTO book (title,author, year, isbn) VALUES ('book1','The Author','1999','1234567890'), тогда id будет равно 1 и обычно(но не обязательно) следующая вставленная строка будет иметь id , равный 2 и т. д.

Если после добавления некоторых строк вы используете SELECT * FROM book, то строки будут упорядочены в соответствии с id , так как никакой другой индекс не указан / не используется.

Возможно, посмотрите на Таблицы Rowid .

Пример

Возможно рассмотрим следующий пример: -

DROP TABLE IF EXISTS book;
CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title text, author text, year integer, isbn integer);
INSERT INTO book (title,author, year, isbn) VALUES 
    ('book1','The Author','1999','1234567890'),
    ('book2','Author 2','1899','2234567890'),
    ('book3','Author 3','1799','3234567890')
;
INSERT INTO book VALUES (100,'book10','Author 10','1999','4234567890'); --<<<<<<<<<< specific ID
INSERT INTO book (title,author, year, isbn) VALUES 
    ('book11','Author 11','1999','1234567890'),
    ('book12','Author 12','1899','2234567890'),
    ('book13','Author 13','1799','3234567890')
;
INSERT INTO book VALUES (10,'book10','Author 10','1999','4234567890'); --<<<<<<<<<< specific ID
SELECT * FROM book; 

This: -

  1. DROP s книжный стол (чтобы его было легко перезапустить)
  2. CREATE s таблица книг.
  3. INSERT s 3 книги с id не указаныed (типичное)
  4. INSERT четвертая книга, но с указанием id из 100
  5. INSERT s и еще 3 книги(не то, что это будет 101-103, так как 100 - это самый высокий идентификатор перед вставками)
  6. INSERT последняя строка НО с определенным id из 10.
  7. SELECT s все строки со всеми упорядоченными столбцами из таблицы книги, так как не было указано ORDER BY в соответствии со скрытым индексом на основе идентификатора .ПРИМЕЧАНИЕ хотя идентификатор 10 был последним вставленным, это 4-я строка.

Результат

enter image description here

В Python: -

conn = sqlite3.connect("books.db")
conn.execute("DROP TABLE IF EXISTS book")
conn.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY,title text, author text, year integer, isbn integer)")
conn.execute("INSERT INTO book (title,author, year, isbn) "
             "VALUES('book1','The Author','1999','1234567890'), "
             "('book2','Author 2','1899','2234567890'), "
             "('book3','Author 3','1799','3234567890');")
conn.execute("INSERT INTO book VALUES (100,'book10','Author 10','1999','4234567890'); --<<<<<<<<<< specific ID")
conn.execute("INSERT INTO book (title,author, year, isbn) VALUES ('book11','Author 11','1999','1234567890'),('book12','Author 12','1899','2234567890'),('book13','Author 13','1799','3234567890');")
conn.execute("INSERT INTO book VALUES (10,'book10','Author 10','1999','4234567890'); --<<<<<<<<<< specific ID")
cur = conn.cursor()
cur.execute("SELECT * FROM book") 
for each in cur:
    print("{0:<20} {1:<20} {2:<20} {3:<20} {4:<20}".format(each[0],each[1],each[2],each[3],each[4]))
conn.commit()
conn.close()

Результаты в: -

1                    book1                The Author           1999                 1234567890          
2                    book2                Author 2             1899                 2234567890          
3                    book3                Author 3             1799                 3234567890          
10                   book10               Author 10            1999                 4234567890          
100                  book10               Author 10            1999                 4234567890          
101                  book11               Author 11            1999                 1234567890          
102                  book12               Author 12            1899                 2234567890          
103                  book13               Author 13            1799                 3234567890 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...