2013-10-14 6 views
6

Ich führe eine Abfrage in psycopg2 aus, die mit einer PostgreSQL-Datenbank verbunden ist. Hier ist der Code in Frage:PostgreSQL TypeError: nicht alle Argumente während der Formatierung von Strings konvertiert

with open('dataFile.txt', 'r') as f: 
    lines = f.readlines() 
    newLines = [line[:-1] for line in lines] 
    curr=conn.cursor() 
    lineString = ','.join(newLines) 
    curr.execute("SELECT fields.fieldkey FROM fields LEFT JOIN zone ON zone.fieldkey=fields.fieldkey WHERE zone.zonekey = %s;", (newLines[0])) 
    rows = curr.fetchall() 

Es gibt kein Problem mit der DB verbindet, und die Art der Linien [0] auf jeden Fall String ist, ich überprüfte das. Stimmt etwas in der Syntax meiner String-Formatierung nicht?

Der Fehler, den ich bekommen, ist dies zu klären:

TypeError: not all arguments converted during string formatting 

Antwort

12

Es ein Komma nach lines[0] sein muss, dass ein Tupel zu machen.

curr.execute(""" 
    SELECT fields.fieldkey 
    FROM fields 
    LEFT JOIN zone ON zone.fieldkey=fields.fieldkey 
    WHERE zone.zonekey = %s; 
""", (lines[0],)) 

Seit den execute method is expecting a sequence (or a mapping) es iteriert über die Zeichenfolge, die Sie von Klammern umgeben sind. Es ist also notwendig, dies explizit als Tupel zu definieren. Das gleiche Ergebnis mit einem klareren Code kann unter Verwendung des tuple function:

(tuple(lines[0])) 
erzielt werden
Verwandte Themen