I made a simple database for movies.
import sqlite3
connection = sqlite3.connect("movies.db")
cursor = connection.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS movies(
movie_id INTEGER PRIMARY KEY AUTOINCREMENT,
Name VARCHAR NOT NULL,
Studio VARCHAR)""")
cursor.execute("""CREATE TABLE IF NOT EXISTS info(
sid INTEGER PRIMARY KEY AUTOINCREMENT,
year INTEGER,
imdb INTEGER)""")
class InDB:
def add(self):
cursor.execute("""INSERT INTO movies
(Name, Studio)
VALUES
(?, ?)""", (self.movie_name, self.studio_name))
connection.commit()
def add_in(self):
cursor.execute("""INSERT INTO info
(year, imdb)
VALUES
(?, ?)""", (self.year, self.imdb))
connection.commit()
def delete(self):
cursor.execute("DELETE FROM movies WHERE movie_id = ?", [self.movie_id])
connection.commit()
cursor.execute("DELETE FROM info WHERE sid = ?", [self.movie_id])
connection.commit()
def update(self):
cursor.execute("""UPDATE movies SET Name = ?, Studio = ?
WHERE movie_id = ?
""", (self.movie_name, self.studio_name, self.movie_id))
connection.commit()
cursor.execute("""UPDATE info SET year = ?, imdb = ?
WHERE sid = ?
""", (self.year, self.imdb, self.movie_id))
connection.commit()
def select(self):
cursor.execute("""SELECT movie_id, Name, Studio, year, imdb FROM movies
JOIN info ON movies.movie_id = info.sid""")
data = cursor.fetchall()
for index, item in enumerate(data, 1):
print(f"{index}. Name: {item[1]} Studio: {item[2]} Year: {item[3]} IMDB: {item[4]}")
def search(self):
cursor.execute("""SELECT movie_id, Name, Studio, imdb FROM movies
JOIN info ON movies.movie_id = info.sid
where year = ? """, [self.year])
data = cursor.fetchall()
for index, item in enumerate(data, 1):
print(f"{index}. ID: {item[0]} Name: {item[1]} Studio: {item[2]} IMDB: {item[3]}")
def menu():
choice = None
while choice != 'exit':
print('\nChoose number: ')
print('1. Add movie')
print('2. Delete movie')
print('3. Update movie')
print('4. List of movies')
print("5. Search movie by year: ")
print("Type 'exit' to exit")
choice = input("\nChoose number:")
if choice == '1':
first = InDB()
second = InDB()
first.movie_name = input("Movie: ")
first.studio_name = input("Studio")
second.year = int(input('Year: '))
second.imdb = float(input("IMDB: "))
second.add_in()
first.add()
elif choice == '2':
number = InDB()
number.movie_id = int(input("ID: "))
number.delete()
elif choice == '3':
r1 = InDB()
r1.movie_id = int(input("Enter the movie ID you want to change: "))
r1.movie_name = input("Enter a new movie name: ")
r1.studio_name = input("Enter a studio name: ")
r1.year = int(input("Enter the year: "))
r1.imdb = float(input("Enter IMDB: "))
r1.update()
elif choice == '4':
k1 = InDB()
k1.select()
elif choice == '5':
s1 = InDB()
s1.year = int(input("Enter the year: "))
s1.search()
else:
print("\nPlease choose number correctly!\n")
menu()
cursor.execute("""SELECT movie_id, Name, Studio, year, imdb FROM movies
JOIN info ON movies.movie_id = info.sid""")
data = cursor.fetchall()
for item in data:
print(item)
cursor.close()
connection.close()
I want to remove this error for that I need to create __init__
function
Pycharm offered me to add this code:
class InDB:
def __init__(self):
self.movie_id = None
self.imdb = None
self.year = None
self.movie_name = None
self.studio_name = None
Now there is no error. Can someone explain how and where should I use __init__
function, I am new to programming but is this code right?
def __init__(self):
self.movie_id = None
self.imdb = None
self.year = None
self.movie_name = None
self.studio_name = None
I have seen code like this can you explain what is difference between this two code?
def __init__(self, movie_id, movie_name, studio_name, imdb, year):
self.movie_id = movie_id
self.movie_name = movie_name
self.studio_name = studio_name
self.imdb = imdb
self.year = year
New code:
connection = sqlite3.connect("movies.db")
cursor = connection.cursor()
connection.execute("PRAGMA foreign_keys = ON")
cursor.execute("""CREATE TABLE IF NOT EXISTS movies(
movie_id INTEGER PRIMARY KEY AUTOINCREMENT,
Name VARCHAR NOT NULL,
Studio VARCHAR
)
""")
cursor.execute("""CREATE TABLE IF NOT EXISTS info(
sid INTEGER PRIMARY KEY AUTOINCREMENT,
year INTEGER,
imdb INTEGER,
CONSTRAINT fk_sid
FOREIGN KEY (sid) references movies(movie_id) ON DELETE CASCADE)""")
class InDB:
def __init__(self):
pass
def add(self, movie_name, studio_name, year, imdb):
cursor.execute("""INSERT INTO movies
(Name, Studio)
VALUES
(?, ?)""", (movie_name, studio_name))
cursor.execute("""INSERT INTO info
(year, imdb)
VALUES
(?, ?)""", (year, imdb))
connection.commit()
def delete(self, movie_name, studio_name):
cursor.execute("DELETE FROM movies WHERE Name = ? and Studio = ?", (movie_name, studio_name))
connection.commit()
def update(self, old_movie_name, old_studio_name, new_mn, new_sn, year, imdb, sid):
cursor.execute("""UPDATE movies SET Name = ?, Studio = ?
WHERE Name = ? and Studio = ?
""", (new_mn, new_sn, old_movie_name, old_studio_name,))
cursor.execute("""UPDATE info SET year = ?, imdb = ?
WHERE sid = ?""", (year, imdb, sid))
connection.commit()
def select(self):
cursor.execute("""SELECT movie_id, Name, Studio, year, imdb FROM movies
JOIN info ON movies.movie_id = info.sid""")
data = cursor.fetchall()
for index, item in enumerate(data, 1):
print(f"{index}. Name: {item[1]} Studio: {item[2]} Year: {item[3]} IMDB: {item[4]}")
def search(self, year):
cursor.execute("""SELECT movie_id, Name, Studio, imdb FROM movies
JOIN info ON movies.movie_id = info.sid
where year = ? """, [year])
data = cursor.fetchall()
for index, item in enumerate(data, 1):
print(f"{index}. ID: {item[0]} Name: {item[1]} Studio: {item[2]} IMDB: {item[3]}")
def update_search(self, movie_name, studio_name):
cursor.execute("""SELECT movie_id, Name, Studio, imdb , year FROM movies
JOIN info ON movies.movie_id = info.sid
where Name = ? AND Studio = ? """,
(movie_name, studio_name))
data = cursor.fetchall()
global int1
for item in data:
print(f"ID: {item[0]} Name: {item[1]} Studio: {item[2]} IMDB: {item[3]} Year: {item[4]}")
tuple1 = data[0]
int1 = tuple1[0]
def menu():
choice = None
while choice != 'exit':
print('\nChoose number: ')
print('1. Add movie')
print('2. Delete movie')
print('3. Update movie')
print('4. List of movies')
print("5. Search movie by year: ")
print("Type 'exit' to exit")
choice = input("\nChoose number:")
if choice == '1':
first = InDB()
movie_name = input("Movie: ")
studio_name = input("Studio")
year = int(input('Year: '))
imdb = float(input("IMDB: "))
first.add(movie_name, studio_name, year, imdb)
elif choice == '2':
delete_movie = InDB()
movie_name = input("Movie name: ")
studio_name = input("Studio name: ")
delete_movie.delete(movie_name, studio_name)
elif choice == '3':
r1 = InDB()
movie_name = input("Enter old movie: ")
studio_name = input("Enter old studio name: ")
r1.update_search(movie_name, studio_name)
print("1. Update: ")
print("2. Exit: ")
second_choice = (input("\nChoose number:"))
if second_choice == "1":
print("Enter info: ")
old_movie_name = movie_name
old_studio_name = studio_name
sid = int1
new_mn = input("Enter a new movie nam: ")
new_sn = input("Enter a studio name: ")
year = int(input('Year: '))
imdb = int(input("IMDB: "))
r1.update(old_movie_name, old_studio_name, new_mn, new_sn, year, imdb, sid)
else:
break
elif choice == '4':
k1 = InDB()
k1.select()
elif choice == '5':
s1 = InDB()
year = int(input("Enter the year: "))
s1.search(year)
else:
print("\nPlease choose number correctly!\n")
menu()
cursor.close()
connection.close()
import sqlite3
connection = sqlite3.connect("movies.db")
cursor = connection.cursor()
connection.execute("PRAGMA foreign_keys = ON")
cursor.execute("""CREATE TABLE IF NOT EXISTS movies(
movie_id INTEGER PRIMARY KEY AUTOINCREMENT,
Name VARCHAR NOT NULL,
Studio VARCHAR
)
""")
cursor.execute("""CREATE TABLE IF NOT EXISTS info(
sid INTEGER PRIMARY KEY AUTOINCREMENT,
year INTEGER,
imdb INTEGER,
CONSTRAINT fk_sid
FOREIGN KEY (sid) references movies(movie_id) ON DELETE CASCADE)""")
class InDB:
def __init__(self):
pass
def add(self, movie_name, studio_name, year, imdb):
cursor.execute("""INSERT INTO movies
(Name, Studio)
VALUES
(?, ?)""", (movie_name, studio_name))
cursor.execute("""INSERT INTO info
(year, imdb)
VALUES
(?, ?)""", (year, imdb))
connection.commit()
def delete(self, movie_name, studio_name):
cursor.execute("DELETE FROM movies WHERE Name = ? and Studio = ?", (movie_name, studio_name))
connection.commit()
def update(self, old_movie_name, old_studio_name, new_mn, new_sn, year, imdb, sid):
cursor.execute("""UPDATE movies SET Name = ?, Studio = ?
WHERE Name = ? and Studio = ?
""", (new_mn, new_sn, old_movie_name, old_studio_name,))
cursor.execute("""UPDATE info SET year = ?, imdb = ?
WHERE sid = ?""", (year, imdb, sid))
connection.commit()
def select(self):
cursor.execute("""SELECT movie_id, Name, Studio, year, imdb FROM movies
JOIN info ON movies.movie_id = info.sid""")
data = cursor.fetchall()
for index, item in enumerate(data, 1):
print(f"{index}. Name: {item[1]} Studio: {item[2]} Year: {item[3]} IMDB: {item[4]}")
def search(self, year):
cursor.execute("""SELECT movie_id, Name, Studio, imdb FROM movies
JOIN info ON movies.movie_id = info.sid
where year = ? """, [year])
data = cursor.fetchall()
for index, item in enumerate(data, 1):
print(f"{index}. ID: {item[0]} Name: {item[1]} Studio: {item[2]} IMDB: {item[3]}")
def update_search(self, movie_name, studio_name):
cursor.execute("""SELECT movie_id, Name, Studio, imdb , year FROM movies
JOIN info ON movies.movie_id = info.sid
where Name = ? AND Studio = ? """,
(movie_name, studio_name))
data = cursor.fetchall()
global int1
for item in data:
print(f"ID: {item[0]} Name: {item[1]} Studio: {item[2]} IMDB: {item[3]} Year: {item[4]}")
tuple1 = data[0]
int1 = tuple1[0]
def menu():
choice = None
while choice != 'exit':
print('\nChoose number: ')
print('1. Add movie')
print('2. Delete movie')
print('3. Update movie')
print('4. List of movies')
print("5. Search movie by year: ")
print("Type 'exit' to exit")
choice = input("\nChoose number:")
if choice == '1':
first = InDB()
movie_name = input("Movie: ")
studio_name = input("Studio")
year = int(input('Year: '))
imdb = float(input("IMDB: "))
first.add(movie_name, studio_name, year, imdb)
elif choice == '2':
delete_movie = InDB()
movie_name = input("Movie name: ")
studio_name = input("Studio name: ")
delete_movie.delete(movie_name, studio_name)
elif choice == '3':
r1 = InDB()
movie_name = input("Enter old movie: ")
studio_name = input("Enter old studio name: ")
r1.update_search(movie_name, studio_name)
print("1. Update: ")
print("2. Exit: ")
second_choice = (input("\nChoose number:"))
if second_choice == "1":
print("Enter info: ")
old_movie_name = movie_name
old_studio_name = studio_name
sid = int1
new_mn = input("Enter a new movie nam: ")
new_sn = input("Enter a studio name: ")
year = int(input('Year: '))
imdb = int(input("IMDB: "))
r1.update(old_movie_name, old_studio_name, new_mn, new_sn, year, imdb, sid)
else:
break
elif choice == '4':
k1 = InDB()
k1.select()
elif choice == '5':
s1 = InDB()
year = int(input("Enter the year: "))
s1.search(year)
else:
print("\nPlease choose number correctly!\n")
menu()
cursor.close()
connection.close()