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-- |
0 | 1 |
import sqlalchemy |
2 |
from sqlalchemy import * |
|
3 |
||
4 |
import logging; log = logging.getLogger('pvl.verkko.db') |
|
5 |
||
6 |
# schema |
|
7 |
metadata = MetaData() |
|
8 |
||
6 | 9 |
# TODO: count, completely separate dhcp_events? |
0 | 10 |
dhcp_hosts = Table('dhcp_hosts', metadata, |
11 |
Column('rowid', Integer, primary_key=True), |
|
12 |
||
13 |
# unique |
|
14 |
Column('ip', String), |
|
15 |
Column('mac', String), |
|
16 |
Column('gw', String), |
|
17 |
||
18 |
# updated |
|
19 |
Column('name', String), |
|
20 |
Column('first_seen', DateTime), |
|
21 |
Column('last_seen', DateTime), |
|
22 |
) |
|
23 |
||
24 |
# for ORM models |
|
25 |
from sqlalchemy.orm import mapper, sessionmaker |
|
26 |
||
27 |
Session = sessionmaker() |
|
28 |
||
29 |
class Database (object) : |
|
30 |
""" |
|
31 |
Our underlying database. |
|
32 |
""" |
|
33 |
||
34 |
# XXX: alias Tables in? |
|
35 |
dhcp_hosts = dhcp_hosts |
|
36 |
||
2
b0659c867226
fixup pvl.verkko.wsgi.Application + test.py/wsgi to remove default path from pvl.verkko.db
Tero Marttila <terom@paivola.fi>
parents:
1
diff
changeset
|
37 |
def __init__ (self, database) : |
b0659c867226
fixup pvl.verkko.wsgi.Application + test.py/wsgi to remove default path from pvl.verkko.db
Tero Marttila <terom@paivola.fi>
parents:
1
diff
changeset
|
38 |
""" |
b0659c867226
fixup pvl.verkko.wsgi.Application + test.py/wsgi to remove default path from pvl.verkko.db
Tero Marttila <terom@paivola.fi>
parents:
1
diff
changeset
|
39 |
database - sqlalchemy connection URI |
b0659c867226
fixup pvl.verkko.wsgi.Application + test.py/wsgi to remove default path from pvl.verkko.db
Tero Marttila <terom@paivola.fi>
parents:
1
diff
changeset
|
40 |
""" |
b0659c867226
fixup pvl.verkko.wsgi.Application + test.py/wsgi to remove default path from pvl.verkko.db
Tero Marttila <terom@paivola.fi>
parents:
1
diff
changeset
|
41 |
|
0 | 42 |
self.engine = create_engine(database, |
43 |
echo = (log.isEnabledFor(logging.DEBUG)), |
|
44 |
) |
|
45 |
self.session = Session(bind=self.engine) |
|
46 |
||
47 |
# ORM |
|
48 |
def query (self, cls) : |
|
49 |
return self.session.query(cls) |
|
50 |
||
51 |
# SQL |
|
52 |
def select (self, query) : |
|
53 |
return self.engine.connect().execute(query) |
|
54 |
||
55 |
def get (self, query) : |
|
56 |
""" |
|
57 |
Fetch a single row. |
|
58 |
||
59 |
XXX: returning None if not found |
|
60 |
""" |
|
61 |
||
62 |
return self.select(query).fetchone() |