pvl/verkko/db.py
changeset 17 29f0cf9220e0
parent 16 51509b5ce1c0
child 40 bc8ab048b208
--- a/pvl/verkko/db.py	Thu Oct 18 23:06:23 2012 +0300
+++ b/pvl/verkko/db.py	Fri Oct 19 02:39:57 2012 +0300
@@ -6,9 +6,8 @@
 # schema
 metadata = MetaData()
 
-# TODO: count, completely separate dhcp_events?
 dhcp_hosts = Table('dhcp_hosts', metadata,
-    Column('id',         Integer,    primary_key=True),
+    Column('id',            Integer,    primary_key=True),
 
     # unique
     Column('ip',            String,     nullable=False),
@@ -30,6 +29,20 @@
     UniqueConstraint('ip', 'mac', 'gw'),
 )
 
+dhcp_leases = Table('dhcp_leases', metadata,
+    Column('id',            Integer,    primary_key=True),
+
+    Column('ip',            String,     nullable=False),
+    Column('mac',           String,     nullable=False),
+    Column('hostname',      String,     nullable=True),
+
+    Column('starts',        DateTime,   nullable=False),
+    Column('ends',          DateTime,   nullable=True),  # never
+
+    Column('state',         String,     nullable=True),
+    Column('next',          String,     nullable=True),
+)
+
 # for ORM models
 from sqlalchemy.orm import mapper, sessionmaker
 
@@ -40,9 +53,6 @@
         Our underlying database.
     """
     
-    # XXX: alias Tables in?
-    dhcp_hosts = dhcp_hosts
-
     def __init__ (self, database) :
         """
             database        - sqlalchemy connection URI
@@ -57,6 +67,9 @@
         return Session(bind=self.engine)
    
     # SQL
+    def execute (self, query) :
+        return self.engine.execute(query)
+
     def select (self, query) :
         return self.engine.execute(query)
 
@@ -68,3 +81,24 @@
         """
 
         return self.select(query).fetchone()
+
+    def insert (self, insert) :
+        """
+            Execute given INSERT query, returning the inserted primary key.
+        """
+
+        result = self.engine.execute(insert)
+
+        id, = result.inserted_primary_key
+        
+        return id
+
+    def update (self, update) :
+        """
+            Execute given UPDATE query, returning the number of matched rows.
+        """
+
+        result = self.engine.execute(update)
+        
+        return result.rowcount
+