db.triggers and table.triggers introspection (#60)

Closes #59
This commit is contained in:
Simon Willison 2019-09-02 17:09:41 -07:00 committed by GitHub
commit 2ca63e3b2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 61 additions and 0 deletions

View file

@ -20,6 +20,9 @@ ForeignKey = namedtuple(
"ForeignKey", ("table", "column", "other_table", "other_column")
)
Index = namedtuple("Index", ("seq", "name", "unique", "origin", "partial", "columns"))
Trigger = namedtuple("Trigger", ("name", "table", "sql"))
DEFAULT = object()
COLUMN_TYPE_MAPPING = {
@ -146,6 +149,15 @@ class Database:
def views(self):
return [self[name] for name in self.view_names()]
@property
def triggers(self):
return [
Trigger(*r)
for r in self.conn.execute(
"select name, tbl_name, sql from sqlite_master where type = 'trigger'"
).fetchall()
]
def execute_returning_dicts(self, sql, params=None):
cursor = self.conn.execute(sql, params or tuple())
keys = [d[0] for d in cursor.description]
@ -561,6 +573,17 @@ class Table(Queryable):
indexes.append(Index(**row))
return indexes
@property
def triggers(self):
return [
Trigger(*r)
for r in self.db.conn.execute(
"select name, tbl_name, sql from sqlite_master where type = 'trigger'"
" and tbl_name = ?",
(self.name,),
).fetchall()
]
def create(
self,
columns,