Please note: self.c.execute(stm,(name,)) in def removeRule()
Otherwise,
Traceback (most recent call last):
File "SQLite.py", line 91, in <module>
sqlite.removeRule('rule1')
File "SQLite.py", line 55, in removeRule
self.c.execute(stm)
sqlite3.OperationalError: no such column: rule1
Because (name,) forces python to make a tuple out of record.
import sqlite3, csv class SqliteDB: def __init__(self, dbFile, tableName): self.conn = sqlite3.connect(dbFile) self.c = self.conn.cursor() self.tableName = tableName def createTable(self): stm = "CREATE TABLE IF NOT EXISTS {0} \ (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL)"\ .format(self.tableName) self.c.execute(stm) def insertRule(self, rid, name): stm = "INSERT OR IGNORE INTO {0} VALUES (?, ?)"\ .format(self.tableName) self.c.execute(stm, (rid, name)) def removeRule(self, name): stm = "DELETE FROM {0} WHERE NAME = ?".format(self.tableName) self.c.execute(stm,(name,)) def close(self): self.conn.commit() self.conn.close() def loadCSV(self, csvfile): with open(csvfile,'rb') as fin: dr = csv.DictReader(fin) # comma is default delimiter to_db = [(i['ID'], i['NAME']) for i in dr] stm = "INSERT OR IGNORE INTO {0} (ID, NAME) VALUES (?,?)"\ .format(self.tableName) self.c.executemany(stm, to_db)
Reference: https://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute http://sebastianraschka.com/Articles/2014_sqlite_in_python_tutorial.html
No comments:
Post a Comment