On Friday, January 4, 2013 10:08:22 AM UTC-8, andyd...@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'] -- http://mail.python.org/mailman/listinfo/python-list