Evaluate postgres boolean field
donarb
donarb at nwlink.com
Fri Jan 4 13:50:50 EST 2013
On Friday, January 4, 2013 10:08:22 AM UTC-8, andyd... at gmail.com wrote:
> Hi,
>
> I'm hoping for some help on a python script I need to query an api. I'm not a (Python) programmer ordinarily, but do plan to improve!
>
> Specifically I have a for loop evaluating a database row, which I think I can treat as a list. My [4] is a postgres boolean field, and I'm temporarily stuck on how to evaluate this to determine if I use the values in [1].
>
> Could I have some advice on what to change? Also do let me know if you can recommend a good beginners python book.
>
> Data example:
>
> [13, 'Barbican Station', 'Barbican Station, London Underground Ltd., Aldersgate St, London, EC1A 4JA', '01010000E0E61000008851AB9E9803B9BF5BB6972294C2494000000000000000000000000000000000', True]
>
>
> Code:
>
> #!/usr/bin/python
> import psycopg2
> #note that we have to import the Psycopg2 extras library!
> import psycopg2.extras
> import sys
>
> def main():
> conn_string = "host='localhost' dbname='gisdb' user='postgres' password='#########'"
> # print the connection string we will use to connect
> print "Connecting to database\n ->%s" % (conn_string)
>
> conn = psycopg2.connect(conn_string)
>
> # HERE IS THE IMPORTANT PART, by specifying a name for the cursor
> # psycopg2 creates a server-side cursor, which prevents all of the
> # records from being downloaded at once from the server.
> cursor = conn.cursor('cursor_tube', cursor_factory=psycopg2.extras.DictCursor)
> cursor.execute('SELECT * FROM tubestations LIMIT 1000')
>
> # Because cursor objects are iterable we can just call 'for - in' on
> # the cursor object and the cursor will automatically advance itself
> # each iteration.
> # This loop should run 1000 times, assuming there are at least 1000
> # records in 'my_table'
> row_count = 0
> for row in cursor:
> row_count += 1
> if row[4] = True
> print row[1]
> #print "row: %s %s\n" % (row_count, row)
>
> if __name__ == "__main__":
> main()
>
> Thanks!
>
>
> Andy
Your code is pretty close to working, you just need to make a couple modifications. You are using the equals sign as an assignment, not a comparison, although the comparison and value are unnecessary since the field's value is either true or false. And you're missing a colon at the end of the condition. Note also that since you are using a DictCursor you can use column names to reference your row's fields, I guessed on the field names, but you should get the idea.
for row in cursor:
row_count += 1
if row['active']:
print row['name']
More information about the Python-list
mailing list