Python psycopg2 check row exists

postgresql, psycopg2, python, sql

Solution

Don't use `fetchall()` (which returns a list, which is never 'larger than 0'), use `fetchone()`:

def track_exists(self, track_id):
    cur = self.conn.cursor()
    cur.execute("SELECT fma_track_id FROM tracks WHERE fma_track_id = %s", (track_id,))
    return cur.fetchone() is not None

`fetchone()` returns `None` if there is nothing to fetch, and testing against `is not None` gives you a handy boolean value to return directly.

Problem

In Python psycopg2 how can I check if a row exists? ``` def track_exists(self, track_id): cur = self.conn.cursor() cur.execute("SELECT fma_track_id FROM tracks WHERE fma_track_id = %s", (track_id,)) if cur.fetchall() > 0: return true else: return false ``` Currently I am getting ``` Traceback (most recent call last): File "<stdin>", line 1, in <module> File "mumu.py", line 38, in track_exists if cur.fetchall() > 0: TypeError: 'NoneType' object has no attribute '__getitem__' ```

Original source