mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 01:14:31 +02:00
table.use_rowid introspection property, closes #285
This commit is contained in:
parent
dc94f4bb8c
commit
5b257949d9
3 changed files with 25 additions and 0 deletions
|
|
@ -1549,6 +1549,19 @@ The ``.pks`` property returns a list of strings naming the primary key columns f
|
|||
>>> db["PlantType"].pks
|
||||
['id']
|
||||
|
||||
If a table has no primary keys but is a `rowid table <https://www.sqlite.org/rowidtable.html>`__, this property will return ``['rowid']``.
|
||||
|
||||
.. _python_api_introspection_use_rowid:
|
||||
|
||||
.use_rowid
|
||||
----------
|
||||
|
||||
Almost all SQLite tables have a ``rowid`` column, but a table with no explicitly defined primary keys must use that ``rowid`` as the primary key for identifying individual rows. The ``.use_rowid`` property checks to see if a table needs to use the ``rowid`` in this way - it returns ``True`` if the table has no explicitly defined primary keys and ``False`` otherwise.
|
||||
|
||||
>>> db["PlantType"].use_rowid
|
||||
False
|
||||
|
||||
|
||||
.. _python_api_introspection_foreign_keys:
|
||||
|
||||
.foreign_keys
|
||||
|
|
|
|||
|
|
@ -809,6 +809,10 @@ class Table(Queryable):
|
|||
names = ["rowid"]
|
||||
return names
|
||||
|
||||
@property
|
||||
def use_rowid(self):
|
||||
return not any(column for column in self.columns if column.is_pk)
|
||||
|
||||
def get(self, pk_values):
|
||||
if not isinstance(pk_values, (list, tuple)):
|
||||
pk_values = [pk_values]
|
||||
|
|
|
|||
|
|
@ -237,3 +237,11 @@ def test_virtual_table_using(sql, expected_name, expected_using):
|
|||
db = Database(memory=True)
|
||||
db.execute(sql)
|
||||
assert db[expected_name].virtual_table_using == expected_using
|
||||
|
||||
|
||||
def test_use_rowid():
|
||||
db = Database(memory=True)
|
||||
db["rowid_table"].insert({"name": "Cleo"})
|
||||
db["regular_table"].insert({"id": 1, "name": "Cleo"}, pk="id")
|
||||
assert db["rowid_table"].use_rowid
|
||||
assert not db["regular_table"].use_rowid
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue