lib/my_db.py
author fabien
Tue, 23 Sep 2003 10:26:35 -0400
branchxbelweb
changeset 2 4cb6d9f3d3eb
parent 0 a4c49a0c313b
child 3 9e7e8b678819
permissions -rw-r--r--
[svn r1529] Mise � jour des fonctions d'acc�s � la DB.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
     1
#!/usr/bin/python
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
     2
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
     3
import pg
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
     4
import config
0
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
     5
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
     6
class MyDbConnexion:
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
     7
	def __init__(self):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
     8
		self.cnx = pg.connect(config.database, config.host,
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
     9
		config.port, None, None, config.user, config.passwd)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    10
	def add_bookmark(self, bk):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    11
		id = self.get_next_id('bookmarks')
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    12
		res = self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    13
			INSERT INTO bookmarks(id, url, name, ldesc, added)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    14
			VALUES (%d, '%s', '%s', '%s', '%s');
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    15
			INSERT INTO bookmarks(bookmark, keyword)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    16
			VALUES (%d, %d);
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    17
			""" % (id, bk.url, bk.name, bk.desc, bk.added,
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    18
			id, 0))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    19
		return id
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    20
	def get_bookmark(self, id):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    21
		bk = Bookmark()
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    22
		res = self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    23
			SELECT url, name, ldesc, added
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    24
			FROM bookmarks
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    25
			WHERE id = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    26
			""" % (id,))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    27
		res = res.dictresult()[0]
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    28
		bk.url = res['url']
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    29
		bk.name = res['name']
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    30
		bk.desc = res['ldesc']
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    31
		bk.added = res['added']
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    32
		bk.id = id
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    33
		return bk
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    34
	def update_bookmark(self, bk):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    35
		return self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    36
			UPDATE bookmarks
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    37
			SET url = '%s', name = '%s',
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    38
			ldesc = '%s', added = '%s'
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    39
			WHERE id = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    40
			""" % (bk.url, bk.name, bk.desc, bk.added, bk.id))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    41
	def remove_bookmark(self, id):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    42
		return self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    43
			DELETE FROM bookmarks_keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    44
			WHERE bookmark = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    45
			DELETE FROM bookmarks
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    46
			WHERE id = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    47
			""" % (id, id))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    48
	def add_keyword(self, name):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    49
		id = self.get_next_id('keywords')
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    50
		res = self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    51
			INSERT INTO keywords(id, name)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    52
			VALUES (%d, '%s')'
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    53
			""" % (id, name))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    54
		return id
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    55
	def get_keyword(self, id):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    56
		return self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    57
			SELECT name FROM keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    58
			WHERE keyword.id = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    59
			""" % (id,)).getresult()[0][0]
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    60
	def get_keywords(self, bk_id):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    61
		return self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    62
			SELECT id, name FROM keywords, bookmarks_keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    63
			WHERE keywords.id = bookmarks_keywords.keyword
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    64
			AND bookmarks_keywords.bookmark = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    65
			""" % (bk_id,))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    66
	def update_keyword(self, id, name):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    67
		return self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    68
			UPDATE keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    69
			SET name = '%s'
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    70
			WHERE id = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    71
			""" % (name, id))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    72
	def remove_keyword(self, id):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    73
		if id == 0:
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    74
			raise "Can't remove default keyword!"
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    75
		return self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    76
			DELETE FROM bookmarks_keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    77
			WHERE keyword = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    78
			DELETE FROM keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    79
			WHERE id = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    80
			""" % (id, id))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    81
	def merge_keywords(self, merge_id, into_id):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    82
		self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    83
			UPDATE bookmarks_keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    84
			SET keyword = %d
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    85
			WHERE keyword = %d;
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    86
			""" % (into_id, merge_id))
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    87
		self.remove_keyword(merge_id)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    88
	def get_all_keywords(self):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    89
		self.cnx.query("SELECT id, name FROM keywords;"
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    90
	def get_bookmarks(self, has_kw, except_kw):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    91
		basic_qry = """
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    92
		  SELECT id, name, url FROM bookmarks, bookmarks_keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    93
		  WHERE bookmarks.id = bookmarks_keywords.bookmark
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    94
		  AND bookmarks_keywords.keyword = %d
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    95
		  """
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    96
		has_kw.reverse()
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    97
		kw = has_kw.pop()
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    98
		qry = basic_qry % kw
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    99
		has_kw.reverse()
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   100
		for kw in has_kw:
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   101
			qry = qry + ("INTERCEPT " + basic_qry % kw)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   102
		for kw in except_kw:
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   103
			qry = qry + ("EXCEPT " + basic_qry % kw)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   104
		qry = qry + ';'
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   105
	def get_next_id(self, seq_name):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   106
		id = self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   107
			SELECT nextid FROM db_sequence WHERE
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   108
			db_sequence.seq_name = '%s';
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   109
			""" % (seq_name)).getresult()[0][0]
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   110
		self.cnx.query("""
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   111
			UPDATE db_sequence SET nextid = %d
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   112
			WHERE seq_name = 'bookmarks';
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   113
			""" % (id+1,))
0
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
   114
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
   115
def connect():
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   116
	return MyDbConnexion()