мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Это старая версия документа!


Создание БД

import sqlite3
 
con = sqlite3.connect('dosier.db')
 
cur = con.cursor()

Создание таблицы

q = 'CREATE TABLE users(id integer PRIMARY KEY, name text)'
cur.execute(q)
con.commit()

Вставка данных

q = 'INSERT INTO users(id, name) VALUES(?, ?)'
user = (1, 'Вася')
cur.execute(q, user)
con.commit()

Выборка данных

q = 'SELECT id, name FROM users'
cur.execute(q)
rows = cur.fetchall()
 
for row in rows:
    print(row)
 
q = 'SELECT id, name FROM users WHERE id > 10'
cur.execute(q)
rows = cur.fetchall()
 
for row in rows:
    print(row)

Пусть у нас есть три таблички: users (id, user), cities (id, city), users2cities (user_id, city_id).

Содержимое таблицы users

id user
1 Вася
2 Дима
3 Марина

Содержимое таблицы cities

id city
1 Москва
2 Новосибирск
3 Казань
4 Владивосток

Содержимое таблицы users2cities

id city
1 1
2 1
3 2

Предположим, мы хотим найти всех москвичей. Для этого, нам нужно сначала cконструировать запрос, дающий номер, который соответствует Москве:

SELECT id from cities WHERE city='Москва'

Теперь надо нам выяснить у каких пользователей Москва прописана как город:

SELECT users2city.user_id FROM users2city WHERE users2city.city_id in (SELECT id from cities WHERE city='Москва')

И, наконец, найдем имена этих пользователей:

SELECT user FROM users WHERE id in (SELECT users2city.user_id FROM users2city WHERE users2city.city_id in (SELECT id from cities WHERE city='Москва'))

q = 'SELECT id, name FROM users'
cur.execute(q)
rows = cur.fetchall()
 
for row in rows:
    print(row)
 
q = 'SELECT id, name FROM users WHERE id > 10'
cur.execute(q)
rows = cur.fetchall()
 
for row in rows:
    print(row)