--- 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
+