]>
git.ipfire.org Git - people/stevee/pypdns.git/blob - database.py
9 """A dict that allows for object-like property access syntax."""
10 def __getattr__(self
, name
):
14 raise AttributeError(name
)
17 class Database(object):
18 def __init__(self
, filename
):
19 self
.filename
= filename
28 """Closes this database connection."""
29 if self
._db
is not None:
35 """Closes the existing database connection and re-opens it."""
37 self
._db
= sqlite3
.connect(self
.filename
)
38 self
._db
.isolation_level
= None # Enabled autocommit mode
40 def query(self
, query
, *parameters
):
41 """Returns a row list for the given query and parameters."""
42 cursor
= self
._cursor
()
44 self
._execute
(cursor
, query
, parameters
)
45 column_names
= [d
[0] for d
in cursor
.description
]
46 return [Row(itertools
.izip(column_names
, row
)) for row
in cursor
]
51 def get(self
, query
, *parameters
):
52 """Returns the first row returned for the given query."""
53 rows
= self
.query(query
, *parameters
)
57 raise Exception("Multiple rows returned for Database.get() query")
61 def execute(self
, query
, *parameters
):
62 """Executes the given query, returning the lastrowid from the query."""
63 cursor
= self
._cursor
()
65 self
._execute
(cursor
, query
, parameters
)
66 return cursor
.lastrowid
75 return self
._db
.cursor()
77 def _execute(self
, cursor
, query
, parameters
):
79 return cursor
.execute(query
, parameters
)
80 except sqlite3
.OperationalError
:
81 logging
.error("Error connecting to database on %s", self
.filename
)