Программирование и разработка веб-приложений. Использование Python для работы с базой данных

Содержание

Слайд 2

SQLite Несколько таблиц

SQLite

Несколько таблиц

Слайд 3

Новая БД import sqlite3 import os import datetime db_path='e:/sqlite/' db_file='db11.db' full_path=os.path.join(db_path,db_file) print(sqlite3.apilevel) print(full_path) con=sqlite3.connect(full_path) con.close()

Новая БД

import sqlite3
import os
import datetime
db_path='e:/sqlite/'
db_file='db11.db'
full_path=os.path.join(db_path,db_file)
print(sqlite3.apilevel)
print(full_path)
con=sqlite3.connect(full_path)
con.close()

Слайд 4

Создание таблиц sql='''\ CREATE TABLE IF NOT EXISTS author( id_author INTEGER

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

sql='''\
CREATE TABLE IF NOT EXISTS author(
id_author INTEGER PRIMARY KEY,
name_author

TEXT,
descr_author TEXT
);
CREATE TABLE publication(
id_publication INTEGER PRIMARY KEY,
name_publication TEXT
);
CREATE TABLE books(
id_book INTEGER PRIMARY KEY,
id_author INTEGER,
id_publication INTEGER,
title_book TEXT,
descr_book TEXT,
number_book INTEGER
);
'''
Слайд 5

con=sqlite3.connect(full_path) cur=con.cursor() cur.executescript(sql) cur.close() con.close()

con=sqlite3.connect(full_path)
cur=con.cursor()
cur.executescript(sql)
cur.close()
con.close()

Слайд 6

Заполнение автора con=sqlite3.connect(full_path) cur=con.cursor() sql='''\ INSERT INTO author (name_author, descr_author) VALUES

Заполнение автора

con=sqlite3.connect(full_path)
cur=con.cursor()
sql='''\
INSERT INTO author (name_author, descr_author)
VALUES ("Чуковский", "Автор множества книг для

детей")
'''
cur.execute(sql)
con.commit() # Завершаем транзакцию
cur.close() # Закрываем объект-курсор
con.close() # Закрываем соединение
Слайд 7

Заполнение типов публикаций с использованием кортежей и словаря con=sqlite3.connect(full_path) cur=con.cursor() var1=("Роман",)

Заполнение типов публикаций с использованием кортежей и словаря

con=sqlite3.connect(full_path)
cur=con.cursor()
var1=("Роман",)
var2=(2,"Рассказ")
var3={"id":3, "name":"Стихотворение"}
sql1='''INSERT INTO publication

(name_publication) VALUES(?)'''
sql2='''INSERT INTO publication VALUES (?,?)'''
sql3='''INSERT INTO publication VALUES (:id, :name)'''
Слайд 8

cur.execute(sql1,var1) cur.execute(sql2,var2) cur.execute(sql3,var3) con.commit() cur.close() con.close()

cur.execute(sql1,var1)
cur.execute(sql2,var2)
cur.execute(sql3,var3)
con.commit()
cur.close()
con.close()

Слайд 9

Создание и использование списка из кортежей для заполнения var_list=[ (1,1,"Айболит","Добрый доктор",100),

Создание и использование списка из кортежей для заполнения

var_list=[
(1,1,"Айболит","Добрый доктор",100),
(1,2, "Бармалей",

"Злой разбойник",200),
(1,3, "Тяни-толкай","Непонятоное существо",200)
]
sql='''\
INSERT INTO books(id_author, id_publication, title_book, descr_book, number_book)
VALUES (?,?,?,?,?)
''‘
cur.executemany(sql,var_list)
Слайд 10

Исполнение и просмотр числа изменений con.execute(''' UPDATE publication SET name_publication='роман в

Исполнение и просмотр числа изменений

con.execute('''
UPDATE publication SET name_publication='роман в стихах'
WHERE id_publication

= 3
''')
cur.execute ('''
INSERT INTO publication (name_publication)
VALUES ('поэма для детей')
''')
print(con.total_changes)
Слайд 11

Вывод элементов по одному print(cur.execute(''' SELECT * FROM books ''')) print(cur.fetchone()) print(cur.fetchone()) print(cur.fetchone()) print(cur.fetchone()) print(cur.fetchone())

Вывод элементов по одному

print(cur.execute('''
SELECT * FROM books
'''))
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())

Слайд 12

Использование метода итератора __next__() print(cur.execute('''SELECT * FROM books''')) print(cur.__next__()) print(cur.__next__()) print(cur.__next__()) print(cur.__next__()) print(cur.__next__())

Использование метода итератора __next__()

print(cur.execute('''SELECT * FROM books'''))
print(cur.__next__())
print(cur.__next__())
print(cur.__next__())
print(cur.__next__())
print(cur.__next__())

Слайд 13

Вывод через for print(cur.execute('''SELECT * FROM books''')) for i in cur: print("{0}".format(i))

Вывод через for

print(cur.execute('''SELECT * FROM books'''))
for i in cur:
print("{0}".format(i))

Слайд 14

Использование fetchmany print(cur.execute('''SELECT * FROM books''')) print(cur.arraysize) print(cur.fetchmany()) print(cur.fetchmany()) print(cur.fetchmany()) print(cur.fetchmany())

Использование fetchmany

print(cur.execute('''SELECT * FROM books'''))
print(cur.arraysize)
print(cur.fetchmany())
print(cur.fetchmany())
print(cur.fetchmany())
print(cur.fetchmany())

Слайд 15

Сравнение fetch cursor.execute("SELECT id, name FROM `table`") for i in range(cursor.rowcount):

Сравнение fetch

cursor.execute("SELECT id, name FROM `table`")
for i in range(cursor.rowcount):
id, name

= cursor.fetchone()
print id, name
cursor.execute("SELECT id, name FROM `table`")
result = cursor.fetchmany()
while result:
for id, name in result:
print (id, name)
result = cursor.fetchmany()
cursor.execute("SELECT id, name FROM `table`")
for id, name in cursor.fetchall():
print (id, name)
Слайд 16

Размер массива объектов print(cur.execute('''SELECT * FROM books''')) print(cur.arraysize) print(cur.fetchall()) print(cur.fetchall())# второй fetchall выводит пустой список

Размер массива объектов

print(cur.execute('''SELECT * FROM books'''))
print(cur.arraysize)
print(cur.fetchall())
print(cur.fetchall())# второй fetchall выводит пустой список

Слайд 17

row_factory с Row и обращение по индексам и ключам con.row_factory=sqlite3.Row a_list=cur.fetchall()

row_factory с Row и обращение по индексам и ключам

con.row_factory=sqlite3.Row
a_list=cur.fetchall()
print(a_list)
print(type(a_list))
print(len(a_list))
print(a_list[0][3])
print(a_list[0]['title_book'])
print(a_list[0]['TITLE_BOOK'])
for i in

a_list[0]:
print(i)
print(a_list[0].keys())
Слайд 18

row_factory Существует возможность изменить это свойство на имя функции, которая принимает

row_factory

Существует возможность изменить это свойство на имя функции, которая принимает курсор

(cur) и исходную строку как кортеж и возвращает измененную строку результата. Это позволяет, например, получить доступ к столбцам по имени

def dict_factory(cursor, row):
d = {}
for i, col_name in enumerate(cursor.description):
d[col_name[0]] = row[i]
return d
con.row_factory = dict_factory
cur = con.cursor()
cur.execute(''' SELECT * FROM author''')
for i in cur.fetchall():
print(i["author_name"])
cur.close()
con.close()

Слайд 19

def dict_factory(cursor, row): d = {} for i, col_name in enumerate(cursor.description):

def dict_factory(cursor, row):
d = {}
for i, col_name in enumerate(cursor.description):

d[col_name[0]] = row[i]
d[i]=row[i]
return d
con.row_factory = dict_factory
cur = con.cursor()
cur.execute('''SELECT * FROM author''')
for i in cur.fetchall():
print(i[0], i["author_name"])
Слайд 20

con.row_factory = sqlite3.Row Поддерживает отображающийся доступ по имени столбца, индексу, итерации,

con.row_factory = sqlite3.Row

Поддерживает отображающийся доступ по имени столбца, индексу, итерации, представлению,.

Если два объекта Row имеют точно такие же столбцы и их элементы равны, то они сравниваются как равные.

con.row_factory = sqlite3.Row
cur = con.cursor()
cur.execute(''' SELECT * FROM author''')
a_list=cur.fetchall()
print(type(a_list[0]))
print(len(a_list[0]))
print(a_list[0])
print(a_list[0]['author_name'])
print(a_list[0].keys())

Слайд 21

text_factory работа с кодировками и обработка текста con.text_factory=bytes # представление в

text_factory работа с кодировками и обработка текста

con.text_factory=bytes # представление в байтовом

виде
print(cur.execute('''SELECT * FROM books '''))
print(cur.fetchone())
Слайд 22

Пользовательская text_factory con.text_factory=lambda s: str(s, "utf-8") print(cur.execute("SELECT * FROM books")) print(cur.fetchone())

Пользовательская text_factory

con.text_factory=lambda s: str(s, "utf-8")
print(cur.execute("SELECT * FROM books"))
print(cur.fetchone())

Слайд 23

def my01(input): return input.decode('cp1251') con.text_factory = my01

def my01(input):
return input.decode('cp1251')
con.text_factory = my01

Слайд 24

text_factory Свойство используется для управления возвращаемыми текстовыми значениями

text_factory

Свойство используется для управления возвращаемыми текстовыми значениями

Слайд 25

Удаление записей >>> cur.execute("INSERT INTO author VALUES (NULL,'Маршак','Автор стихов')") >>> cur.execute("DELETE

Удаление записей

>>> cur.execute("INSERT INTO author VALUES (NULL,'Маршак','Автор стихов')")

>>>

cur.execute("DELETE FROM author WHERE name_author='Маршак'")

>>> cur.fetchall()
[]
>>> cur.execute("SELECT * FROM author")

>>> cur.fetchall()
[(1, 'Чуковский', 'Автор множества книг для детей')]
Слайд 26

Отмена действий rollback() var1=("Маршак",) sql1='''INSERT INTO author (name_author) VALUES(?) ''' cur.execute(sql1,var1)

Отмена действий rollback()

var1=("Маршак",)
sql1='''INSERT INTO author (name_author) VALUES(?) '''
cur.execute(sql1,var1)
cur.execute("SELECT * FROM author")
print(cur.fetchall())
con.rollback()
cur.execute("SELECT

* FROM author")
print(cur.fetchall())