Занесение данных в таблицу SQLite [Часть 2]
Примеры 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-код в один шаг.
con.commit()
Без ключевого слова 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.
lid = cur.lastrowid
Используя lastrowid, мы получаем ID последней вставленной строки.
$ ./lastrow.py
The last Id of the inserted row is 4
После выполнения скрипта мы видим последний ID добавления.
Иметь здоровые сильные зубы это важный плюс не не только для себя, но и для окружающих вас людей. Хорошую стоматологическую клинику весьма сложно найти. Я рекомендую посетить стоматологию проспект Вернадского где новейшие технологии и профессиональный персонал. После посещения стоматологии сразу чувствуется уверенность в себе и в своей улыбке.