Занесение данных в таблицу SQLite [Часть 2]
27 июля 2015 г.
Archy
Просмотров: 39451
RSS
Обсудить
Примеры Python » SQLite
python sqlite, sqlite insert, sqlite last id, sqlite последний id, создать таблицу sqlite
Мы создадим таблицу Cars и внесем несколько строк данных в неё.
#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys # Подключаемся к базе данных con = lite.connect('test.db') with con: cur = con.cursor() # Создаем таблицу cur.execute("CREATE TABLE Cars(Id INT, Name TEXT, Price INT)") # Вносим данные cur.execute("INSERT INTO Cars VALUES(1, 'Audi', 52642)") cur.execute("INSERT INTO Cars VALUES(2, 'Mercedes', 57127)") cur.execute("INSERT INTO Cars VALUES(3, 'Skoda', 9000)") cur.execute("INSERT INTO Cars VALUES(4, 'Volvo', 29000)") cur.execute("INSERT INTO Cars VALUES(5, 'Bentley', 350000)") cur.execute("INSERT INTO Cars VALUES(6, 'Citroen', 21000)") cur.execute("INSERT INTO Cars VALUES(7, 'Hummer', 41400)") cur.execute("INSERT INTO Cars VALUES(8, 'Volkswagen', 21600)")
Данный скрипт создаёт таблицу Cars и вставляет 8 строк в таблицу.
cur.execute("CREATE TABLE Cars(Id INT, Name TEXT, Price INT)")
Этот SQL-запрос создает новую таблицу Cars. Таблица имеет три столбца.
cur.execute("INSERT INTO Cars VALUES(1,'Audi',52642)") cur.execute("INSERT INTO Cars VALUES(2,'Mercedes',57127)")
Эти две строки добавляют в таблицу данные о двух машин. С использованием ключевого слова with, изменения фиксируются автоматически. В противном случае, мы должны были зафиксировать их вручную.
sqlite> .mode column sqlite> .headers on
Мы проверяем записанные данные консольным инструментом sqlite3. В первую очередь, мы изменяем способ, которым данные отображаются в консоли. Мы используем режим столбцов и включаем заголовки.
sqlite> SELECT * FROM Cars; Id Name Price ---------- ---------- ---------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600
Это данные, которые мы внесли в таблицу Cars.
Мы собираемся создать такую же таблицу, на этот раз используя удобный метод executemany().
#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys cars = ( (1, 'Audi', 52642), (2, 'Mercedes', 57127), (3, 'Skoda', 9000), (4, 'Volvo', 29000), (5, 'Bentley', 350000), (6, 'Hummer', 41400), (7, 'Volkswagen', 21600) ) con = lite.connect('test.db') with con: cur = con.cursor() cur.execute("DROP TABLE IF EXISTS Cars") cur.execute("CREATE TABLE Cars(Id INT, Name TEXT, Price INT)") cur.executemany("INSERT INTO Cars VALUES(?, ?, ?)", cars)
Скрипт удаляет таблицу Cars, если она существует и создает ее заново.
cur.execute("DROP TABLE IF EXISTS Cars") cur.execute("CREATE TABLE Cars(Id INT, Name TEXT, Price INT)")
Первый SQL-запрос удаляет таблицу Cars, если она существует. Второй SQL запрос создает таблицу Cars.
cur.executemany("INSERT INTO Cars VALUES(?, ?, ?)", cars)
Мы вводим 8 строк в таблицу, используя метод executemany(). Первый параметр этого метода – это сам SQL запрос. Второй параметр – это данные в форме кортежа. Это более безопасный и уверенный способ внесения данных в базу.
#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys try: con = lite.connect('test.db') cur = con.cursor() cur.executescript(""" DROP TABLE IF EXISTS Cars; CREATE TABLE Cars(Id INT, Name TEXT, Price INT); INSERT INTO Cars VALUES(1,'Audi',52642); INSERT INTO Cars VALUES(2,'Mercedes',57127); INSERT INTO Cars VALUES(3,'Skoda',9000); INSERT INTO Cars VALUES(4,'Volvo',29000); INSERT INTO Cars VALUES(5,'Bentley',350000); INSERT INTO Cars VALUES(6,'Citroen',21000); INSERT INTO Cars VALUES(7,'Hummer',41400); INSERT INTO Cars VALUES(8,'Volkswagen',21600); """) con.commit() except lite.Error, e: if con: con.rollback() print "Error %s:" % e.args[0] sys.exit(1) finally: if con: con.close()
В вышеприведённом скрипте, мы пересоздаём таблицу Cars, используя метод executescript().
cur.executescript(""" DROP TABLE IF EXISTS Cars; CREATE TABLE Cars(Id INT, Name TEXT, Price INT); INSERT INTO Cars VALUES(1,'Audi',52642); INSERT INTO Cars VALUES(2,'Mercedes',57127); .
Метод executescript() разрешает нам выполнять целый SQL-код в один шаг.
Без ключевого слова with, изменения должны вступить в силу благодаря использованию метода commit().
except lite.Error, e: if con: con.rollback() print "Error %s:" % e.args[0] sys.exit(1)
В случае ошибки, изменения откатятся назад и сообщение об ошибке выведется в терминале.
Получить ID последнего внесения в базу
Иногда, нам необходимо определить id последней вставленной строки. В Python SQLite, мы используем атрибут lastrowid объекта указателя.
#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys con = lite.connect(':memory:') with con: cur = con.cursor() cur.execute("CREATE TABLE Friends(Id INTEGER PRIMARY KEY, Name TEXT);") cur.execute("INSERT INTO Friends(Name) VALUES ('Tom');") cur.execute("INSERT INTO Friends(Name) VALUES ('Rebecca');") cur.execute("INSERT INTO Friends(Name) VALUES ('Jim');") cur.execute("INSERT INTO Friends(Name) VALUES ('Robert');") lid = cur.lastrowid print "The last Id of the inserted row is %d" % lid
Мы создаём таблицу Friends. ID автоматически прибавился.
cur.execute("CREATE TABLE Friends(Id INTEGER PRIMARY KEY, Name TEXT);")
В SQLite, колонка INTEGER PRIMARY KEY прибавляется автоматически. Существует так же параметр AUTOINCREMENT. Для INTEGER PRIMARY KEY AUTOINCREMENT используются слегка разные алгоритмы для создания ID.
cur.execute("INSERT INTO Friends(Name) VALUES ('Tom');") cur.execute("INSERT INTO Friends(Name) VALUES ('Rebecca');") cur.execute("INSERT INTO Friends(Name) VALUES ('Jim');") cur.execute("INSERT INTO Friends(Name) VALUES ('Robert');")
Когда используется авто-инкремент, мы должны явно изложить имена столбцов, пропуская тот, к которому происходит авто-добавление. Четыре оператора вводят четыре строки в таблицу Friends.
Используя lastrowid, мы получаем ID последней вставленной строки.
$ ./lastrow.py The last Id of the inserted row is 4
После выполнения скрипта мы видим последний ID добавления.
Иметь здоровые сильные зубы это важный плюс не не только для себя, но и для окружающих вас людей. Хорошую стоматологическую клинику весьма сложно найти. Я рекомендую посетить стоматологию проспект Вернадского где новейшие технологии и профессиональный персонал. После посещения стоматологии сразу чувствуется уверенность в себе и в своей улыбке.
Python-сообщество
- Начало
- » Python для новичков
- » AUTOINCREMENT в Sqlite3
#1 Окт. 14, 2022 12:43:27
AUTOINCREMENT в Sqlite3
Приветствую! подскажите плз на простом примере как указывается в Sqlite3 при создании таблицы программно AUTOINCREMENT? что-то никак не срабатывает…
cur.execute("""CREATE TABLE IF NOT EXISTS users (
id INT NOT NULL AUTOINCREMENT,
name TEXT NOT NULL,
pass TEXT NOT NULL,
revision INT, PRIMARY KEY(id))
""")
#2 Окт. 14, 2022 12:54:06
AUTOINCREMENT в Sqlite3
CREATE TABLE people ( person_id INTEGER PRIMARY KEY AUTOINCREMENT, first_name text NOT NULL, last_name text NOT NULL );
НО
“SQLite recommends that you should not use AUTOINCREMENT attribute because:
The AUTOINCREMENT keyword imposes extra CPU, memory, disk space, and disk I/O overhead and should be avoided if not strictly needed. It is usually not needed.”
CREATE TABLE IF NOT EXISTS room(room_id INTEGER PRIMARY KEY, name VARCHAR(25) NOT NULL, home_id VARCHAR(25) NOT NULL);
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости