pvl/verkko/db.py
author Tero Marttila <terom@paivola.fi>
Wed, 10 Oct 2012 23:36:23 +0300
changeset 6 0f243c59d5d1
parent 2 b0659c867226
child 14 02c21749cb4f
permissions -rw-r--r--
build urls
import sqlalchemy
from sqlalchemy import *

import logging; log = logging.getLogger('pvl.verkko.db')

# schema
metadata = MetaData()

# TODO: count, completely separate dhcp_events?
dhcp_hosts = Table('dhcp_hosts', metadata,
    Column('rowid',         Integer, primary_key=True),

    # unique
    Column('ip',            String),
    Column('mac',           String),
    Column('gw',            String),
    
    # updated
    Column('name',          String),
    Column('first_seen',    DateTime),
    Column('last_seen',     DateTime),
)

# for ORM models
from sqlalchemy.orm import mapper, sessionmaker

Session = sessionmaker()

class Database (object) :
    """
        Our underlying database.
    """
    
    # XXX: alias Tables in?
    dhcp_hosts = dhcp_hosts

    def __init__ (self, database) :
        """
            database        - sqlalchemy connection URI
        """

        self.engine = create_engine(database, 
            echo    = (log.isEnabledFor(logging.DEBUG)),
        )
        self.session = Session(bind=self.engine)

    # ORM
    def query (self, cls) :
        return self.session.query(cls)
    
    # SQL
    def select (self, query) :
        return self.engine.connect().execute(query)

    def get (self, query) :
        """
            Fetch a single row.
            
            XXX: returning None if not found
        """

        return self.select(query).fetchone()