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__'
Don't use
fetchall()
(which returns a list, which is never 'larger than 0'), usefetchone()
:fetchone()
returnsNone
if there is nothing to fetch, and testing againstis not None
gives you a handy boolean value to return directly.Using
exists
will allow Postgresql to stop searching at the first occurrence in instead of searching until exhausted:Another advantage is that it will always return a single row containing a boolean value which can be used directly without further interpretation.