PostgreSQL TypeError:并非在字符串格式化过程中转换所有参数

Ale*_*ley 7 python postgresql psycopg2

我在psycopg2中执行一个链接到PostgreSQL数据库的查询.这是有问题的代码:

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()
Run Code Online (Sandbox Code Playgroud)

连接到DB没有问题,行[0]的类型肯定是字符串,我检查了.我的字符串格式的语法有问题吗?

我得到的错误,澄清是这样的:

TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)

Clo*_*eto 15

之后必须有一个逗号lines[0]才能成为一个元组.

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

由于该execute方法需要序列(或映射),因此它会迭代您提供的括号内的字符串.因此有必要明确地将其作为一个元组.可以使用以下tuple功能获得相同的结果,代码更清晰:

(tuple(lines[0]))
Run Code Online (Sandbox Code Playgroud)