diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 1aad79f..ec2122c 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -76,6 +76,10 @@
+
+
+
+
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 530c665..3f5805a 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,10 +2,15 @@
-
-
+
+
+
+
+
+
+
@@ -14,21 +19,51 @@
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
@@ -45,6 +80,7 @@
upper
+ create_project
$PROJECT_DIR$
@@ -57,16 +93,23 @@
-
-
-
-
+
+
+
+
@@ -82,6 +125,11 @@
+
+
+
+
+
@@ -125,7 +173,7 @@
-
+
@@ -148,91 +196,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -252,13 +215,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
@@ -283,15 +322,9 @@
-
-
+
-
-
-
-
-
@@ -299,6 +332,11 @@
+
+
+
+
+
@@ -354,26 +392,104 @@
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/challenges139-145/challenge-139.py b/challenges139-145/challenge-139.py
index cb19e0c..d0faa19 100644
--- a/challenges139-145/challenge-139.py
+++ b/challenges139-145/challenge-139.py
@@ -1,12 +1,54 @@
import sqlite3
+from sqlite3 import Error
-with sqlite3.connect('python-by-example') as db:
- cursor = db.cursor()
- cursor.execute("""CREATE TABLE IF NOT EXISTS employees(
- id integer PRIMARY KEY,
- name text NOT NULL,
- dept text NOT NULL,
- salary integer);""")
- cursor.execute("""INSERT INTO employees(id,name,dept,salary)
- VALUES("1","Bob","Sales","25000")""")
- db.commit()
+
+def create_connection(db):
+ try:
+ conn = sqlite3.connect(db)
+ return conn
+ except Error as e:
+ print(e)
+ return None
+
+
+def create_phone_book_table(conn):
+ sql_create_projects_table = """ CREATE TABLE IF NOT EXISTS PhoneBook (
+ id integer PRIMARY KEY,
+ first_name text NOT NULL,
+ surname text,
+ phone integer
+ ); """
+ cur = conn.cursor()
+ cur.execute(sql_create_projects_table)
+ cur.close()
+
+
+def create_phone_book_record(conn, phone_book):
+ sql = ''' INSERT INTO PhoneBook(first_name,surname,phone)
+ VALUES(?,?,?) '''
+ cur = conn.cursor()
+ cur.execute(sql, phone_book)
+ cur.close()
+ return cur.lastrowid
+
+
+def main():
+ conn = create_connection('python-by-example.db')
+
+ with conn:
+ create_phone_book_table(conn)
+
+ phone_book_record_1 = ('Simon', 'Howels', '01223349752')
+ phone_book_record_2 = ('Karen', 'Philips', '01954295773')
+ phone_book_record_3 = ('Darren', 'Smith', '01583749012')
+ phone_book_record_4 = ('Anne', 'Jones', '01323567322')
+ phone_book_record_5 = ('Mark', 'Smith', '01223855534')
+
+ create_phone_book_record(conn, phone_book_record_1)
+ create_phone_book_record(conn, phone_book_record_2)
+ create_phone_book_record(conn, phone_book_record_3)
+ create_phone_book_record(conn, phone_book_record_4)
+ create_phone_book_record(conn, phone_book_record_5)
+
+
+main()
diff --git a/challenges139-145/challenge-140.py b/challenges139-145/challenge-140.py
new file mode 100644
index 0000000..281feb0
--- /dev/null
+++ b/challenges139-145/challenge-140.py
@@ -0,0 +1,84 @@
+import sqlite3
+from sqlite3 import Error
+
+
+def create_connection(db):
+ try:
+ conn = sqlite3.connect(db)
+ return conn
+ except Error as e:
+ print(e)
+ return None
+
+
+def show_all(conn):
+ cur = conn.cursor()
+ cur.execute("SELECT * FROM PhoneBook")
+ rows = cur.fetchall()
+ for row in rows:
+ print(row)
+
+
+def view_phone_book(conn, phone_id):
+ cur = conn.cursor()
+ cur.execute(str("SELECT * FROM PhoneBook WHERE id = " + str(phone_id)))
+ print(cur.fetchone())
+ cur.close()
+
+
+def add_phone_book(conn, phone_book):
+ sql = ''' INSERT INTO PhoneBook(first_name,surname,phone)
+ VALUES(?,?,?) '''
+ cur = conn.cursor()
+ cur.execute(sql, phone_book)
+ print(cur.fetchone())
+ cur.close()
+
+
+def surname_in_phone_book(conn, surname):
+ sql = "SELECT * FROM PhoneBook WHERE surname like '%" + surname + "%'"
+ cur = conn.cursor()
+ cur.execute(sql)
+ rows = cur.fetchall()
+ for row in rows:
+ print(row)
+
+
+def delete_phone_book(conn, phone_id):
+ cur = conn.cursor()
+ cur.execute(str("DELETE FROM tasks WHERE id = " + str(phone_id)))
+ cur.close()
+
+
+def main():
+
+ conn = create_connection('python-by-example.db')
+
+ with conn:
+ print('\n\nMain Menu\n\n\n')
+ print('1) View phone book ')
+ print('2) Add to phone book')
+ print('3) Search for surname')
+ print('4) Delete person from phone book')
+ print('5) Quit')
+ operation_ask = int(input('Enter your selection : '))
+ if operation_ask == 1:
+ ask_id = int(input('Enter id to show : '))
+ view_phone_book(conn, ask_id)
+ elif operation_ask == 2:
+ ask_name = str(input('Enter name : '))
+ ask_surname = str(input('Enter surname : '))
+ ask_phone = str(input('Enter phone : '))
+ phone_book = (ask_name, ask_surname, ask_phone)
+ add_phone_book(conn, phone_book)
+ elif operation_ask == 3:
+ ask_surname = str(input('Enter surname to show : '))
+ surname_in_phone_book(conn, ask_surname)
+ elif operation_ask == 4:
+ ask_id = int(input('Enter id to delete : '))
+ delete_phone_book(conn, ask_id)
+ else:
+ print('Invalid input, please try again.')
+
+
+main()
diff --git a/challenges139-145/challenge-141.py b/challenges139-145/challenge-141.py
new file mode 100644
index 0000000..8de0a0d
--- /dev/null
+++ b/challenges139-145/challenge-141.py
@@ -0,0 +1,92 @@
+import sqlite3
+from sqlite3 import Error
+
+
+def create_connection(db):
+ try:
+ conn = sqlite3.connect(db)
+ return conn
+ except Error as e:
+ print(e)
+ return None
+
+
+def create_author_table(conn):
+ try:
+ sql_create_projects_table = """ CREATE TABLE IF NOT EXISTS authors (
+ name text PRIMARY KEY,
+ birth_place text
+ ); """
+ cur = conn.cursor()
+ cur.execute(sql_create_projects_table)
+ cur.close()
+ except Error as e:
+ print(e)
+
+
+def create_books_table(conn):
+ sql_create_projects_table = """ CREATE TABLE IF NOT EXISTS books (
+ id integer PRIMARY KEY,
+ title text NOT NULL,
+ author text,
+ published_date text
+ ); """
+ cur = conn.cursor()
+ cur.execute(sql_create_projects_table)
+ cur.close()
+
+
+def insert_to_authors(conn, authors):
+ cur = conn.cursor()
+ for author in authors:
+ sql = 'INSERT INTO authors (name, birth_place) VALUES (?, ?)'
+ cur.execute(sql, author)
+ conn.commit()
+ cur.close()
+
+
+def insert_to_books(conn, books):
+ cur = conn.cursor()
+ for book in books:
+ sql = 'INSERT INTO books (title, author, published_date) VALUES (?, ?, ?)'
+ cur.execute(sql, book)
+ print(cur.fetchone())
+ cur.close()
+
+
+def main():
+
+ conn = create_connection('BookInfo.db')
+
+ with conn:
+ create_author_table(conn)
+ create_books_table(conn)
+
+ authors = [
+ ['Agatha Christie', 'Torquay'],
+ ['Cecelia Ahern', 'Dublin'],
+ ['J.K, Rowling', 'Bristol'],
+ ['Oscar Wilde', 'Dublin']
+ ]
+
+ insert_to_authors(conn, authors)
+
+ books = [
+ ['De Profundis', 'Oscar Wilde', '1905'],
+ ['Harry Potter and the chamber of secrets', 'J.K. Rowling', '1998'],
+ ['Harry Potter and the prisoner or Azkaban', 'J.K. Rowling', '1999'],
+ ['Lyrebird', 'Cecelia Ahren', '2017'],
+ ['Murder At the Orient Express', 'Agatha Christie', '1934'],
+ ['Perfect', 'Cecelia Ahren', '2017'],
+ ['The marble collector', 'Cecelia Ahren', '2016'],
+ ['The murder on the links', 'Agatha Christie', '1923'],
+ ['The picture of Dorian Gray', 'Oscar Wilde', '1890'],
+ ['The secret adversary', 'Agatha Christie', '1921'],
+ ['The seven dials mystery', 'Agatha Christie', '1929'],
+ ['The year i met you', 'Cecelia Ahren', '2014']
+ ]
+
+ insert_to_books(conn, books)
+
+
+main()
diff --git a/challenges139-145/challenge-142.py b/challenges139-145/challenge-142.py
new file mode 100644
index 0000000..4f89e4b
--- /dev/null
+++ b/challenges139-145/challenge-142.py
@@ -0,0 +1,50 @@
+import sqlite3
+from sqlite3 import Error
+
+
+def create_connection(db):
+ try:
+ conn = sqlite3.connect(db)
+ return conn
+ except Error as e:
+ print(e)
+ return None
+
+
+def show_all_authors(conn):
+ cur = conn.cursor()
+ cur.execute("SELECT * FROM authors")
+ rows = cur.fetchall()
+ for row in rows:
+ print(row)
+
+
+def search_place_birth(conn, place):
+ cur = conn.cursor()
+ cur.execute(str("select books.title, books.published_date, authors.name from authors join books on books.author = authors.name where authors.birth_place = '" + place + "'"))
+ rows = cur.fetchall()
+ for row in rows:
+ print(row)
+ cur.close()
+
+
+def main():
+
+ conn = create_connection('BookInfo.db')
+
+ with conn:
+ print('\n\nMain Menu\n\n\n')
+ print('1) List authors ')
+ print('2) Search place of birth')
+ print('3) Quit')
+ operation_ask = int(input('Enter your selection : '))
+ if operation_ask == 1:
+ show_all_authors(conn)
+ elif operation_ask == 2:
+ ask_place = str(input('Enter place of birth : '))
+ search_place_birth(conn, ask_place)
+ else:
+ print('Invalid input, please try again.')
+
+
+main()
diff --git a/challenges139-145/sqlite-python-tutorial.py b/challenges139-145/sqlite-python-tutorial.py
new file mode 100644
index 0000000..77a8af9
--- /dev/null
+++ b/challenges139-145/sqlite-python-tutorial.py
@@ -0,0 +1,192 @@
+import sqlite3
+from sqlite3 import Error
+
+
+""""""""""""""""""" CREATING SQLITE DATABASE """""""""""""""""""""
+
+
+def create_connection(db_file):
+ """ create a database connection to the SQLite database
+ specified by db_file
+ :param db_file: database file
+ :return: Connection object or None
+ """
+ try:
+ conn = sqlite3.connect(db_file)
+ return conn
+ except Error as e:
+ print(e)
+ # finally:
+ # conn.close()
+ return None
+
+
+# if __name__ == '__main__':
+# create_connection('python-by-example.db')
+
+
+"""""""""""""""" CREATE TABLE """""""""""""""
+
+
+def create_table(conn, create_table_sql):
+ """ create a table from the create_table_sql statement
+ :param conn: Connection object
+ :param create_table_sql: a CREATE TABLE statement
+ :return:
+ """
+ try:
+ c = conn.cursor()
+ c.execute(create_table_sql)
+ c.close()
+ except Error as e:
+ print(e)
+
+
+def create_project(conn, project):
+ """
+ Create a new project into the projects table
+ :param conn:
+ :param project:
+ :return: project id
+ """
+ sql = ''' INSERT INTO projects(name,begin_date,end_date)
+ VALUES(?,?,?) '''
+ cur = conn.cursor()
+ cur.execute(sql, project)
+ cur.close()
+ 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)
+ cur.close()
+ return cur.lastrowid
+
+def select_all_tasks(conn):
+ """
+ Query all rows in the tasks table
+ :param conn: the Connection object
+ :return:
+ """
+ cur = conn.cursor()
+ cur.execute("SELECT * FROM tasks")
+
+ rows = cur.fetchall()
+
+ for row in rows:
+ print(row)
+
+
+def select_task_by_priority(conn, priority):
+ """
+ Query tasks by priority
+ :param conn: the Connection object
+ :param priority:
+ :return:
+ """
+ cur = conn.cursor()
+ cur.execute("SELECT * FROM tasks WHERE priority=?", (priority,))
+
+ rows = cur.fetchall()
+
+ for row in rows:
+ print(row)
+
+
+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)
+ cur.close()
+
+
+def delete_task(conn, task):
+ """
+ delete a task
+ :param conn:
+ :param task:
+ :return: null
+ """
+ cur = conn.cursor()
+ cur.execute(str("DELETE FROM tasks WHERE id = " + str(task)))
+ cur.close()
+
+
+def main():
+ database = 'python-by-example.db'
+
+ # sql_create_projects_table = """ CREATE TABLE IF NOT EXISTS projects (
+ # id integer PRIMARY KEY,
+ # name text NOT NULL,
+ # begin_date text,
+ # end_date text
+ # ); """
+ #
+ # sql_create_tasks_table = """CREATE TABLE IF NOT EXISTS tasks (
+ # id integer PRIMARY KEY,
+ # name text NOT NULL,
+ # priority integer,
+ # status_id integer NOT NULL,
+ # project_id integer NOT NULL,
+ # begin_date text NOT NULL,
+ # end_date text NOT NULL,
+ # FOREIGN KEY (project_id) REFERENCES projects (id)
+ # );"""
+ #
+ # # create a database connection
+ conn = create_connection(database)
+ # if conn is not None:
+ # # create projects table
+ # create_table(conn, sql_create_projects_table)
+ # # create tasks table
+ # create_table(conn, sql_create_tasks_table)
+ # else:
+ # print("Error! cannot create the database connection.")
+
+ with conn:
+ # # create a new project
+ # project = ('Cool App with SQLite & Python', '2015-01-01', '2015-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 requirements', 1, 1, 1, '2015-01-03', '2015-01-05')
+ #
+ # # create tasks
+ # create_task(conn, task_1)
+ create_task(conn, task_2)
+
+
+ # update_task(conn, (2, '2015-01-04', '2015-01-06',2))
+
+ # delete_task(conn, 2)
+
+
+ # print("1. Query task by priority:")
+ # select_task_by_priority(conn, 1)
+ #
+ # print("2. Query all tasks")
+ # select_all_tasks(conn)
+
+if __name__ == '__main__':
+ main()
diff --git a/commands b/commands
index a7decc9..716e83c 100644
--- a/commands
+++ b/commands
@@ -1,3 +1,7 @@
sudo apt-get install python3-tk
-sudo apt install sqlite
+
+
+------ challenges139-145 ----------
+
+$sudo apt install sqlite
diff --git a/useful-link b/useful-link
new file mode 100644
index 0000000..df65cda
--- /dev/null
+++ b/useful-link
@@ -0,0 +1,4 @@
+for CSV challenges
+
+------ challenges139-145 ----------
+- http://www.sqlitetutorial.net/sqlite-python/