我试图二进制数据(漩涡散列)插入到PG表和正在一个错误:

TypeError: not all arguments converted during string formatting 

代码:

cur.execute("""
    INSERT INTO
        sessions
        (identity_hash, posted_on)
    VALUES
        (%s, NOW())
""", identity_hash) 

我尝试添加conn.Binary(“identity_hash”)到插入前的变量,但得到同样的错误。

在identity_hash柱是BYTEA。

任何想法?

有帮助吗?

解决方案

您拍照时看看“的例子/ binary.py”在psycopg2源代码分发脚本?在这里工作得很好。它看起来有点比你摘录不同:

data1 = {'id':1, 'name':'somehackers.jpg',
     'img':psycopg2.Binary(open('somehackers.jpg').read())}

curs.execute("""INSERT INTO test_binary
              VALUES (%(id)s, %(name)s, %(img)s)""", data1)

其他提示

在的问题是要传递的对象作为第二个参数:所述第二参数应该是一个元组或一个字典。没有捷径如%字符串运算符。

您应该做的:

cur.execute("""
    INSERT INTO
        sessions
        (identity_hash, posted_on)
    VALUES
        (%s, NOW())
""", (identity_hash,))

遇到同样的问题,并发现,这实际上是覆盖在它们的常见问题解答

  

我试图执行一个查询,但它失败,错误不是所有的参数   串格式化期间转换(或对象不支持   索引)。为什么? Psycopg总是需要位置参数是   作为一个序列过去了,即使查询需要的参数。   请记住,做单个项目的元组在Python中你需要一个   逗号!见将参数传递给SQL查询。

cur.execute("INSERT INTO foo VALUES (%s)", "bar")    # WRONG
cur.execute("INSERT INTO foo VALUES (%s)", ("bar"))  # WRONG
cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct
cur.execute("INSERT INTO foo VALUES (%s)", ["bar"])  # correct
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top