author | Tero Marttila <terom@paivola.fi> |
Wed, 10 Oct 2012 22:45:50 +0300 | |
changeset 3 | 5990b188c54b |
parent 2 | b0659c867226 |
child 6 | 0f243c59d5d1 |
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 |
||
9 |
dhcp_hosts = Table('dhcp_hosts', metadata, |
|
10 |
Column('rowid', Integer, primary_key=True), |
|
11 |
||
12 |
# unique |
|
13 |
Column('ip', String), |
|
14 |
Column('mac', String), |
|
15 |
Column('gw', String), |
|
16 |
||
17 |
# updated |
|
18 |
Column('name', String), |
|
19 |
Column('first_seen', DateTime), |
|
20 |
Column('last_seen', DateTime), |
|
21 |
) |
|
22 |
||
23 |
# for ORM models |
|
24 |
from sqlalchemy.orm import mapper, sessionmaker |
|
25 |
||
26 |
Session = sessionmaker() |
|
27 |
||
28 |
class Database (object) : |
|
29 |
""" |
|
30 |
Our underlying database. |
|
31 |
""" |
|
32 |
||
33 |
# XXX: alias Tables in? |
|
34 |
dhcp_hosts = dhcp_hosts |
|
35 |
||
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
|
36 |
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
|
37 |
""" |
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 |
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
|
39 |
""" |
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 |
|
0 | 41 |
self.engine = create_engine(database, |
42 |
echo = (log.isEnabledFor(logging.DEBUG)), |
|
43 |
) |
|
44 |
self.session = Session(bind=self.engine) |
|
45 |
||
46 |
# ORM |
|
47 |
def query (self, cls) : |
|
48 |
return self.session.query(cls) |
|
49 |
||
50 |
# SQL |
|
51 |
def select (self, query) : |
|
52 |
return self.engine.connect().execute(query) |
|
53 |
||
54 |
def get (self, query) : |
|
55 |
""" |
|
56 |
Fetch a single row. |
|
57 |
||
58 |
XXX: returning None if not found |
|
59 |
""" |
|
60 |
||
61 |
return self.select(query).fetchone() |