9

我正在 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()

连接到数据库没有问题,lines[0] 的类型肯定是字符串,我检查过。我的字符串格式的语法有问题吗?

为了澄清,我得到的错误是:

TypeError: not all arguments converted during string formatting
4

1 回答 1

24

后面必须有一个逗号lines[0]才能使它成为一个元组。

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

由于该execute方法需要一个序列(或映射),因此它会遍历您提供的用括号括起来的字符串。所以有必要明确地把它变成一个元组。tuple使用以下函数可以获得相同的结果,但代码更清晰:

(tuple(lines[0]))
于 2013-10-14T17:01:05.867 回答