На прошлом уроке, мы с вами узнали, как создать базу данных, и как создавать таблицы в базе данных SQLite Python. Для просмотра информации находящихся внутри нашей базы, рекомендую воспользоваться программой SQLiteStudio. И так, в этом уроке, мы с вами разберемся:
Вставка данных в SQLite
На прошлом уроке, по созданию таблиц, мы создали две таблицы, projests, tasks. Алгоритм наших действий следующий:
- Сначала необходимо подключиться к нашей базе данных, в случае отсутствия, база будет создана автоматически, но в таком случае, вам придется заново создавать таблицы, поэтому рекомендую сначала почитать предыдущую статью.
- Создаем объект Cursor вызвав метод курсора объекта Connection
- Выполняем запроса INSERT
Вставим в нашу таблицу projects новый проект, а в таблицу tasks вставим несколько задач.
Ниже приведен весь листинг кода, позже мы разберем каждый участок кода, что она делает, и как это работает.
import sqlite3
from sqlite3 import Error
def create_connection(db_file):
conn = None
try:
conn = sqlite3.connect(db_file)
except Error as e:
print(e)
return conn
def create_project(conn, project):
sql = ''' INSERT INTO projects(name,begin_date,end_date)
VALUES(?,?,?) '''
cur = conn.cursor()
cur.execute(sql, project)
conn.commit()
return cur.lastrowid
def create_task(conn, task):
"""
Create a new task
:param conn:
:param task:
:return:
"""
sql = ''' INSERT INTO tasks(name,priority,status_id,project_id,begin_date,end_date)
VALUES(?,?,?,?,?,?) '''
cur = conn.cursor()
cur.execute(sql, task)
conn.commit()
return cur.lastrowid
def main():
database = r"C:\sqlite\db\pythonsqlite.db"
# create a database connection
conn = create_connection(database)
with conn:
# create a new project
project = ('Cool App with SQLite & Python', '2015-01-01', '2021-01-30');
project_id = create_project(conn, project)
# tasks
task_1 = ('Analyze the requirements of the app', 1, 1, project_id, '2015-01-01', '2015-01-02')
task_2 = ('Confirm with user about the top req', 1, 1, project_id, '2015-01-03', '2015-01-05')
# create tasks
create_task(conn, task_1)
create_task(conn, task_2)
if __name__ == '__main__':
main()
- Создаем функцию create_connection() по аналогии с предыдущим уроком, можете просто скопировать прошлый код
- Создаем новую функцию create_project(), для добавления нового проекта в таблицу projects. В этой функции, мы использовали атрибут lastrowid объекта cursor, данный атрибут вернет нам сгенерированный идентификатор.
- Создаем новую функцию create_tasks(), для добавления задач, в таблицу tasks
- Создаем функцию main(), которая служит для запуска нашего скрипта. Данная функция добавит в нашу базу, один проект и две задачи
- Завершающим этапом, мы вызываем функцию main() конструкцией
if __name__ == '__main__': main()
- Запустите скрипт, затем откройте свою базу через программу SQLiteStudio, и просмотрите данные наших двух таблиц.
Обновление данных в SQLite
При обновлении базы данных, мы используем запрос UPDATE. Представим себе ситуацию, что нам надо обновить данные в таблице tasks. Логика решения этой задачи довольно проста.
- Подключаемся к нашей базе
- Создаем объект cursor
- Выполняем запрос UPDATE методом execute
Ниже приведен полный листинг кода:
import sqlite3
from sqlite3 import Error
def create_connection(db_file):
conn = None
try:
conn = sqlite3.connect(db_file)
except Error as e:
print(e)
return conn
def update_task(conn, task):
sql = ''' UPDATE tasks
SET priority = ? ,
begin_date = ? ,
end_date = ?
WHERE id = ?'''
cur = conn.cursor()
cur.execute(sql, task)
conn.commit()
def main():
database = r"C:\sqlite\db\pythonsqlite.db"
# create a database connection
conn = create_connection(database)
with conn:
update_task(conn, (2, '2015-01-04', '2015-01-06', 2))
if __name__ == '__main__':
main()
По сути в этом листинге, ничего особо не изменилось, у нас появилась новая функция update_task(), данная функция предназначена для обновления данных для конкретной задачи.
def update_task(conn, task):
"""
update priority, begin_date, and end date of a task
:param conn:
:param task:
:return: project id
"""
sql = ''' UPDATE tasks
SET priority = ? ,
begin_date = ? ,
end_date = ?
WHERE id = ?'''
cur = conn.cursor()
cur.execute(sql, task)
conn.commit()
Затем в функции main() вызываем ранее созданную нами функцию update_task() для обновления задачи с id 2.
def main():
database = r"C:\sqlite\db\pythonsqlite.db"
# create a database connection
conn = create_connection(database)
with conn:
update_task(conn, (2, '2015-01-04', '2015-01-06', 2))
if __name__ == '__main__':
main()
Запустите программу, и откройте свою базу в SQLite для просмотра обновленных данных. Ниже приведен скриншот обновленных данных в таблице tasks.
На данном скриншоте,мы ясно видим, что задача с id 2 обновлена надлежащим образом.