4 DATABASE_NAME = 'contacts.db'
8 def __init__(self, basedir):
9 self._path = os.path.join(basedir, DATABASE_NAME)
11 if not os.path.exists(self._path):
14 self.conn = sqlite3.connect(self._path)
17 """Creates new databse."""
19 self.conn = sqlite3.connect(self._path)
20 self.conn.execute("""CREATE TABLE data (user_id int, field_id int, \
22 self.conn.execute("""CREATE TABLE field (id int primary key, name str)""")
23 self.conn.execute("""CREATE TABLE relation (data_id int, \
25 self.conn.execute("""CREATE TABLE struct (id int, name str, \
30 """Closes connection with database."""
35 def update_field(self, fname):
36 """Adds new field to database."""
38 fields = self.conn.execute("""SELECT name from field""").fetchall()
39 if not fname in fields:
40 self.conn.execute("""INSERT INTO field values((SELECT max(id)
41 FROM field)+1, ?)""", (fname,))
43 def get_field_id_by_name(self, fname):
44 """Returns field id by it name."""
46 return self.conn.execute("""SELECT id FROM field WHERE name=?""", \
47 (fname,)).fetchone()[0]
49 def get_field_name_by_id(self, _id):
50 """Returns field id by it name."""
52 return self.conn.execute("""SELECT name FROM field WHERE id=?""", \
55 def get_entry_by_id(self, _id):
56 """Returns full entry by it id."""
58 sql_res = self.conn.execute("""SELECT id_field, value FROM data
59 WHERE id=?""", (_id,)).fetchall()
60 return dict([(self.get_field_name_by_id(field_id), value) for field_id, \
63 def get_all_entries(self):
64 """Returns list of all entries."""
66 ids = set([item[0] for item in self.conn.execute( \
67 """SELECT id FROM data""").fetchall()])
68 return [self.get_entry_by_id(_id) for _id in ids]
73 if __name__ == "__main__":
74 db = SQLite('/home/plastun/meabook')
75 #db.update_field('test')
76 #print db.get_field_id_by_name('fax')
77 #print db.get_entry_by_id(1)
78 print db.get_all_entries()