Skip to content

Commit 48ba06c

Browse files
committed
sql30: API for COUNT query.
Change here : - Adds an API for getting number of rows in a query using COUNT. - Test case for same.
1 parent e511399 commit 48ba06c

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

sql30/db.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,21 @@ def delete(self, tbl=None, **kwargs):
292292
query = 'DELETE FROM %s WHERE %s' % (tbl, constraints)
293293
self.cursor.execute(query, kwargs)
294294

295+
def count(self, tbl=None, **kwargs):
296+
tbl = tbl or self.table
297+
assert tbl, "No table set for operation"
298+
constraints = self._form_constraints(kwargs=kwargs)
299+
if constraints:
300+
query = 'SELECT COUNT(*) FROM %s WHERE %s' % (tbl, constraints)
301+
else:
302+
query = 'SELECT COUNT(*) FROM %s ' % tbl
303+
304+
self.cursor.execute(query, kwargs)
305+
try:
306+
return self.cursor.fetchone()[0]
307+
except:
308+
return None
309+
295310
# Backward compatibility (release 0.0.1 ).
296311
write = create
297312
remove = delete

sql30/tests/test_misc.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# scale.py
2+
import os
3+
import unittest
4+
5+
from sql30 import db
6+
7+
DB_NAME = './count.db'
8+
9+
10+
class Square(db.Model):
11+
TABLE = 'square'
12+
PKEY = 'num'
13+
DB_SCHEMA = {
14+
'db_name': DB_NAME,
15+
'tables': [
16+
{
17+
'name': TABLE,
18+
'fields': {
19+
'num': 'int',
20+
'square': 'int',
21+
},
22+
'primary_key': PKEY
23+
}]
24+
}
25+
VALIDATE_BEFORE_WRITE = True
26+
INIT_CONNECTION = True
27+
28+
29+
class MiscTest(unittest.TestCase):
30+
31+
TABLE = 'square'
32+
33+
def setUp(self):
34+
if os.path.exists(DB_NAME):
35+
os.remove(DB_NAME)
36+
37+
self.db = Square()
38+
self.db.table = self.TABLE
39+
40+
# add 3 records
41+
self.db.write(num=1, square=1)
42+
self.db.write(num=2, square=4)
43+
self.db.write(num=3, square=9)
44+
self.db.commit()
45+
46+
def test_count(self):
47+
"""
48+
Tests for context manager operations.
49+
"""
50+
import pdb ; pdb.set_trace()
51+
with Square() as db:
52+
db.table = self.TABLE
53+
self.assertEqual(db.count(), 3)
54+
55+
self.assertEqual(db.count(num=2), 1)
56+
self.assertEqual(db.count(square=9), 1)
57+
58+
59+
60+
def tearDown(self):
61+
os.remove(DB_NAME)

0 commit comments

Comments
 (0)