mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-26 19:04:32 +02:00
Compare commits
3 commits
main
...
fix_for_pr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e67431106 | ||
|
|
3c849e97a6 | ||
|
|
9d19d8f66d |
1 changed files with 19 additions and 3 deletions
|
|
@ -37,6 +37,11 @@ class Database:
|
||||||
def tables(self):
|
def tables(self):
|
||||||
return [self[name] for name in self.table_names]
|
return [self[name] for name in self.table_names]
|
||||||
|
|
||||||
|
def execute_returning_dicts(self, sql, params=None):
|
||||||
|
cursor = self.conn.execute(sql, params or tuple())
|
||||||
|
keys = [d[0] for d in cursor.description]
|
||||||
|
return [dict(zip(keys, row)) for row in cursor.fetchall()]
|
||||||
|
|
||||||
def create_table(self, name, columns, pk=None, foreign_keys=None):
|
def create_table(self, name, columns, pk=None, foreign_keys=None):
|
||||||
foreign_keys = foreign_keys or []
|
foreign_keys = foreign_keys or []
|
||||||
foreign_keys_by_name = {fk[0]: fk for fk in foreign_keys}
|
foreign_keys_by_name = {fk[0]: fk for fk in foreign_keys}
|
||||||
|
|
@ -127,12 +132,23 @@ class Table:
|
||||||
def indexes(self):
|
def indexes(self):
|
||||||
sql = 'PRAGMA index_list("{}")'.format(self.name)
|
sql = 'PRAGMA index_list("{}")'.format(self.name)
|
||||||
indexes = []
|
indexes = []
|
||||||
for row in list(self.db.conn.execute(sql).fetchall()):
|
for row in self.db.execute_returning_dicts(sql):
|
||||||
column_sql = 'PRAGMA index_info("{}")'.format(row[1])
|
index_name = row["name"]
|
||||||
|
index_name_quoted = (
|
||||||
|
'"{}"'.format(index_name)
|
||||||
|
if not index_name.startswith('"')
|
||||||
|
else index_name
|
||||||
|
)
|
||||||
|
column_sql = "PRAGMA index_info({})".format(index_name_quoted)
|
||||||
columns = []
|
columns = []
|
||||||
for seqno, cid, name in self.db.conn.execute(column_sql).fetchall():
|
for seqno, cid, name in self.db.conn.execute(column_sql).fetchall():
|
||||||
columns.append(name)
|
columns.append(name)
|
||||||
indexes.append(Index(*(row + (columns,))))
|
row["columns"] = columns
|
||||||
|
# These coluns may be missing on older SQLite versions:
|
||||||
|
for key, default in {"origin": "c", "partial": 0}.items():
|
||||||
|
if key not in row:
|
||||||
|
row[key] = default
|
||||||
|
indexes.append(Index(**row))
|
||||||
return indexes
|
return indexes
|
||||||
|
|
||||||
def create(self, columns, pk=None, foreign_keys=None):
|
def create(self, columns, pk=None, foreign_keys=None):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue