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);
30 columns = ['id', 'isbn', 'lccn',
31 'title', 'subtitle', 'authors', 'edition',
32 'publisher', 'publish year', 'publish month', 'publish location',
33 'pages', 'pagination', 'weight', 'last updated']
35 bookTriggerCreation = '''
36 CREATE TRIGGER IF NOT EXISTS insert_books_time AFTER INSERT ON books
38 UPDATE books SET last_updated = DATETIME('NOW') WHERE rowid = new.rowid;
41 CREATE TRIGGER IF NOT EXISTS update_books_time AFTER UPDATE ON books
43 UPDATE books SET last_updated = DATETIME('NOW') WHERE rowid = new.rowid;
46 CREATE TRIGGER IF NOT EXISTS delete_books_backup BEFORE DELETE ON books
48 INSERT INTO books_deleted (isbn, lccn,
49 title, subtitle, authors, edition,
50 publisher, publish_year, publish_month, publish_location,
51 pages, pagination, weight, last_updated)
53 title, subtitle, authors, edition,
54 publisher, publish_year, publish_month, publish_location,
55 pages, pagination, weight, last_updated
57 WHERE rowid = old.rowid;
60 CREATE TRIGGER IF NOT EXISTS insert_book_category_time AFTER INSERT ON book_categories
62 UPDATE books SET last_updated = DATETIME('NOW') WHERE id = new.id;
65 CREATE TRIGGER IF NOT EXISTS delete_book_category_time AFTER DELETE ON book_categories
67 UPDATE books SET last_updated = DATETIME('NOW') WHERE id = old.id;
71 ################################3
72 # character escaping, etc for sql queries
73 #################################
75 return s.replace(" ","_").lower()
78 return '"' + str(v).strip().replace('"','""') + '"'
80 ###################################
82 ##################################
84 conn = sqlite3.connect(dbFile)
88 for k,v in book.items():
90 cols.append(colify(k))
91 vals.append(stringify(v))
93 query = "INSERT INTO "+bookTable+" ("+", ".join(cols)+") VALUES ("+", ".join(vals)+");"
98 def updateBook(book, bookID):
99 conn = sqlite3.connect(dbFile)
102 for k,v in book.items():
103 updates.append(colify(k)+"="+stringify(v))
104 query = "UPDATE "+bookTable+" SET " + ", ".join(updates)+" WHERE id = " +str(bookID)+";"
110 conn = sqlite3.connect(dbFile)
112 query = "SELECT * FROM "+bookTable+";"
126 def getRemovedBooks():
127 conn = sqlite3.connect(dbFile)
129 query = "SELECT * FROM "+bookRemovedTable+";"
143 def getBookByID(bookid):
144 conn = sqlite3.connect(dbFile)
146 query = "SELECT * FROM "+bookTable+" WHERE id = "+str(bookid)+";"
159 # removes book from catalogue
160 def removeBook(bookid):
161 conn = sqlite3.connect(dbFile)
163 query = "DELETE FROM " +bookTable+ " WHERE id = "+str(bookid)+";"
165 query = "DELETE FROM " +bookCategoryTable+ " WHERE id = "+str(bookid)+";"
170 def removeBooks(bookids):
171 conn = sqlite3.connect(dbFile)
173 query1 = "DELETE FROM " +bookTable+ " WHERE id = ?;"
174 query2 = "DELETE FROM " +bookCategoryTable+ " WHERE id = ?;"
177 c.execute(query1, bid)
178 c.execute(query2, bid)
182 # fully deletes book from removedBooks table
183 def deleteBook(bookid):
184 conn = sqlite3.connect(dbFile)
186 query = "DELETE FROM " +bookRemovedTable+ " WHERE id = "+str(bookid)+";"
191 def deleteBooks(bookids):
192 conn = sqlite3.connect(dbFile)
194 query = "DELETE FROM " +bookRemovedTable+ " WHERE id = ?;"
197 c.execute(query, bid)
201 #########################################
202 # Category related functions
203 ########################################
204 def categorizeBook(bookid, cat_id):
205 conn = sqlite3.connect(dbFile)
207 query = "INSERT OR IGNORE INTO "+bookCategoryTable+" (id,cat_id) VALUES ("+str(bookid)+", "+str(cat_id)+");"
213 conn = sqlite3.connect(dbFile)
215 query = "SELECT cat_id, category FROM "+categoryTable+";"
219 cats.append({'id':cat_id, 'category':cat})
223 def addCategory(cat):
224 conn = sqlite3.connect(dbFile)
226 query = "INSERT OR IGNORE INTO "+categoryTable+" (category) VALUES ("+stringify(cat)+");"
227 print >>sys.stderr, query
232 #########################################
233 # Database initialization
234 #########################################
235 def createBooksTable():
236 conn = sqlite3.connect(dbFile)
238 c.executescript(bookTableCreation)
242 def createTriggers():
243 conn = sqlite3.connect(dbFile)
245 c.executescript(bookTriggerCreation)