Работа с базой данных SQLite в Python 2


Для работы с SQLite в Python 2 должен быть установлен пакет sqlite и python 2.5+.

# под Arch Linux sudo pacman -S sqlite
# под Ubuntu sudo apt-get install sqlite

Проверка sqlite

$ sqlite3 test.db 
sqlite> .tables
sqlite> .exit
$ python
>>> import sqlite3
>>> sqlite3.version

Создаем базу данных, вставляем данные и делаем выборку.

# -*- coding: utf_8 -*-
import sqlite3
con = sqlite3.connect('users.db') # Создаем соединение с базой данных. Если БД не существует то она будет создана, иначе файл будет открыт.
cur = con.cursor() # Создание объекта курсора для взаимодействия с БД.
cur.execute('CREATE TABLE names (id INTEGER PRIMARY KEY, firstName VARCHAR(100), secondName VARCHAR(40))') #Создание таблицы
names
con.commit()
cur.execute('INSERT INTO names (id, firstName, secondName) VALUES(NULL, "Vasya", "Pupkin")') #Вставка кортежа со значениями
con.commit()
print cur.lastrowid
cur.execute('SELECT * FROM names ')
print cur.fetchall()
con.close()

Вставляем кортеж со значениями из переменных

firstName ='Vasya'
secondName='Pupkin'
cur.execute('INSERT INTO users VALUES (null, ?, ?)', (firstName, secondName))
con.commit()
ВАЖНО: При вставке одного значения в один столбец нужно так-же соблюдать синтаксис формата кортежа. Например такой код не будет работать:
firstName ='Vasya'
cur.execute('INSERT INTO names (firstName) VALUES (?)', (firstName))
Ты получишь ошибку:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied.

После значения необходимо ставить запятую, тогда интерпретатор воспримет его как кортеж:
cur.execute('INSERT INTO names (firstName) VALUES (?)', (firstName,))

Получаем выборку данных из нескольких строк:

firstName ='Vasya'
secondName='Pupkin'
cur.execute('INSERT INTO names VALUES (null, ?, ?)', (firstName, secondName))
con.commit()
cur.execute('SELECT * FROM names')
print cur.fetchall()
cur.execute('SELECT * FROM names')
for row in cur:
print '-'*10
print 'ID:', row[0]
print 'First name:', row[1]
print 'Second name:', row[2]
print '-'*10
con.close()

Вывод:
[(1, u'Vasya', u'Pupkin')]
----------
ID: 1
First name: Vasya
Second name: Pupkin
----------
Process finished with exit code 0

Получаем выборку данных одной строки:

with con:
cur = con.cursor()
cur.execute('SELECT * FROM names')
data = cur.fetchone()
print data[1]
con.close()

Вывод:
Vasya

Можно выбрать определенное количество строк, передав значение в курсор:

cur.execute('SELECT * FROM names') 
print cur.fetchmany(2)

Вывод:
[(1, u'Vasya', u'Pupkin'), (2, u'Vasya', u'Pupkin')]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *