mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 01:14:31 +02:00
Added table.delete(pk) method, refs #62
This commit is contained in:
parent
eb39c84a8f
commit
19073d6d97
3 changed files with 39 additions and 0 deletions
|
|
@ -382,6 +382,20 @@ You can cause any missing columns to be added automatically using ``alter=True``
|
|||
|
||||
>>> db["dogs"].update(1, {"breed": "Mutt"}, alter=True)
|
||||
|
||||
.. _python_api_delete:
|
||||
|
||||
Deleting a specific record
|
||||
==========================
|
||||
|
||||
You can delete a record using ``table.delete()``::
|
||||
|
||||
>>> db = sqlite_utils.Database("dogs.db")
|
||||
>>> db["dogs"].delete(1)
|
||||
|
||||
The ``delete()`` method takes the primary key of the record. This can be a tuple of values if the row has a compound primary key::
|
||||
|
||||
>>> db["compound_dogs"].delete((5, 3))
|
||||
|
||||
Upserting data
|
||||
==============
|
||||
|
||||
|
|
|
|||
|
|
@ -853,6 +853,17 @@ class Table(Queryable):
|
|||
def value_or_default(self, key, value):
|
||||
return self._defaults[key] if value is DEFAULT else value
|
||||
|
||||
def delete(self, pk_values):
|
||||
if not isinstance(pk_values, (list, tuple)):
|
||||
pk_values = [pk_values]
|
||||
self.get(pk_values)
|
||||
wheres = ["[{}] = ?".format(pk_name) for pk_name in self.pks]
|
||||
sql = "delete from [{table}] where {wheres}".format(
|
||||
table=self.name, wheres=" and ".join(wheres)
|
||||
)
|
||||
with self.db.conn:
|
||||
self.db.conn.execute(sql, pk_values)
|
||||
|
||||
def update(self, pk_values, updates=None, alter=False):
|
||||
updates = updates or {}
|
||||
if not isinstance(pk_values, (list, tuple)):
|
||||
|
|
|
|||
14
tests/test_delete.py
Normal file
14
tests/test_delete.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
def test_delete_rowid_table(fresh_db):
|
||||
table = fresh_db["table"]
|
||||
table.insert({"foo": 1}).last_pk
|
||||
rowid = table.insert({"foo": 2}).last_pk
|
||||
table.delete(rowid)
|
||||
assert [{"foo": 1}] == list(table.rows)
|
||||
|
||||
|
||||
def test_delete_pk_table(fresh_db):
|
||||
table = fresh_db["table"]
|
||||
table.insert({"id": 1}, pk="id")
|
||||
table.insert({"id": 2}, pk="id")
|
||||
table.delete(1)
|
||||
assert [{"id": 2}] == list(table.rows)
|
||||
Loading…
Add table
Add a link
Reference in a new issue