【问题标题】:PostgreSQL TypeError: not all arguments converted during string formattingPostgreSQL TypeError:字符串格式化期间并非所有参数都转换
【发布时间】:2013-10-14 16:45:10
【问题描述】:

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

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

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

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

    由于execute method is expecting a sequence (or a mapping) 它会遍历您提供的用括号括起来的字符串。所以有必要明确地把它变成一个元组。使用tuple function 可以获得相同的结果,但代码更清晰:

    (tuple(lines[0]))
    

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 2020-08-23
      • 2015-10-28
      • 2015-01-21
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多