4 dbFile = 'sqLibrary.db'
6 bookRemovedTable='books_deleted'
7 bookCategoryTable='book_categories'
8 categoryTable = 'categories'
10 bookTableCreation = '''
11 CREATE TABLE IF NOT EXISTS books
12 (id INTEGER PRIMARY KEY,
13 isbn, lccn, title, subtitle, authors, edition,
14 publisher, publish_year, publish_month, publish_location,
15 pages, pagination, weight, last_updated);
17 CREATE TABLE IF NOT EXISTS books_deleted
18 (id INTEGER PRIMARY KEY,
19 isbn, lccn, title, subtitle, authors, edition,
20 publisher, publish_year, publish_month, publish_location,
21 pages, pagination, weight, last_updated);
23 CREATE TABLE IF NOT EXISTS categories
24 (cat_id INTEGER PRIMARY KEY, category STRING);
26 CREATE TABLE IF NOT EXISTS book_categories
27 (id INTEGER, cat_id INTEGER);
29 CREATE TABLE IF NOT EXISTS book_deleted_categories
30 (id INTEGER, cat_id INTEGER);
33 columns = ['id', 'isbn', 'lccn',
34 'title', 'subtitle', 'authors', 'edition',
35 'publisher', 'publish year', 'publish month', 'publish location',
36 'pages', 'pagination', 'weight', 'last updated']
38 bookTriggerCreation = '''
39 CREATE TRIGGER IF NOT EXISTS insert_books_time AFTER INSERT ON books
41 UPDATE books SET last_updated = DATETIME('NOW') WHERE rowid = new.rowid;
44 CREATE TRIGGER IF NOT EXISTS update_books_time AFTER UPDATE ON books
46 UPDATE books SET last_updated = DATETIME('NOW') WHERE rowid = new.rowid;
49 CREATE TRIGGER IF NOT EXISTS delete_books_backup BEFORE DELETE ON books
51 INSERT INTO books_deleted (isbn, lccn,
52 title, subtitle, authors, edition,
53 publisher, publish_year, publish_month, publish_location,
54 pages, pagination, weight, last_updated)
56 title, subtitle, authors, edition,
57 publisher, publish_year, publish_month, publish_location,
58 pages, pagination, weight, last_updated
60 WHERE rowid = old.rowid;
63 CREATE TRIGGER IF NOT EXISTS insert_book_category_time AFTER INSERT ON book_categories
65 UPDATE books SET last_updated = DATETIME('NOW') WHERE id = new.id;
68 CREATE TRIGGER IF NOT EXISTS delete_book_category_time AFTER DELETE ON book_categories
70 UPDATE books SET last_updated = DATETIME('NOW') WHERE id = old.id;
74 ################################3
75 # character escaping, etc for sql queries
76 #################################
78 return s.replace(" ","_").lower()
81 return '"' + str(v).strip().replace('"','""') + '"'
83 ###################################
85 ##################################
87 conn = sqlite3.connect(dbFile)
91 for k,v in book.items():
93 cols.append(colify(k))
94 vals.append(stringify(v))
96 query = "INSERT INTO "+bookTable+" ("+", ".join(cols)+") VALUES ("+", ".join(vals)+");"
101 def updateBook(book, bookID):
102 conn = sqlite3.connect(dbFile)
105 for k,v in book.items():
106 updates.append(colify(k)+"="+stringify(v))
107 query = "UPDATE "+bookTable+" SET " + ", ".join(updates)+" WHERE id = " +str(bookID)+";"
113 conn = sqlite3.connect(dbFile)
115 query = "SELECT * FROM "+bookTable+";"
129 def getRemovedBooks():
130 conn = sqlite3.connect(dbFile)
132 query = "SELECT * FROM "+bookRemovedTable+";"
146 def getBookByID(bookid):
147 conn = sqlite3.connect(dbFile)
149 query = "SELECT * FROM "+bookTable+" WHERE id = "+str(bookid)+";"
162 # removes book from catalogue
163 def removeBook(bookid):
164 conn = sqlite3.connect(dbFile)
166 query = "DELETE FROM " +bookTable+ " WHERE id = "+str(bookid)+";"
168 query = "DELETE FROM " +bookCategoryTable+ " WHERE id = "+str(bookid)+";"
173 # fully deletes book from removedBooks table
174 def deleteBook(bookid):
175 conn = sqlite3.connect(dbFile)
177 query = "DELETE FROM " +bookRemovedTable+ " WHERE id = "+str(bookid)+";"
182 #########################################
183 # Category related functions
184 ########################################
185 def categorizeBook(bookid, cat_id):
186 conn = sqlite3.connect(dbFile)
188 query = "INSERT OR IGNORE INTO "+bookCategoryTable+" (id,cat_id) VALUES ("+str(bookid)+", "+str(cat_id)+");"
194 conn = sqlite3.connect(dbFile)
196 query = "SELECT cat_id, category FROM "+categoryTable+";"
200 cats.append({'id':cat_id, 'category':cat})
204 def addCategory(cat):
205 conn = sqlite3.connect(dbFile)
207 query = "INSERT OR IGNORE INTO "+categoryTable+" (category) VALUES ("+stringify(cat)+");"
208 print >>sys.stderr, query
213 #########################################
214 # Database initialization
215 #########################################
216 def createBooksTable():
217 conn = sqlite3.connect(dbFile)
219 c.executescript(bookTableCreation)
223 def createTriggers():
224 conn = sqlite3.connect(dbFile)
226 c.executescript(bookTriggerCreation)