Ian*_*Ian 10 python postgresql psycopg2
我正在尝试将二进制数据(漩涡哈希)插入到PG表中并收到错误:
TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)
码:
cur.execute("""
INSERT INTO
sessions
(identity_hash, posted_on)
VALUES
(%s, NOW())
""", identity_hash)
Run Code Online (Sandbox Code Playgroud)
我尝试在插入之前将conn.Binary("identity_hash")添加到变量,但得到相同的错误.
identity_hash列是bytea.
有任何想法吗?
pir*_*iro 27
您遇到的问题是您将对象作为第二个参数传递:第二个参数应该是元组或字典.没有%字符串运算符中的快捷方式.
你应该做:
cur.execute("""
INSERT INTO
sessions
(identity_hash, posted_on)
VALUES
(%s, NOW())
""", (identity_hash,))
Run Code Online (Sandbox Code Playgroud)
Sal*_*ali 11
遇到同样的问题,发现这实际上已经包含在他们的FAQ中
我尝试执行一个查询,但它失败了,错误并非在字符串格式化过程中转换了所有参数(或者对象不支持索引).为什么?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
Run Code Online (Sandbox Code Playgroud)
您是否看过psycopg2源代码分发中的"examples/binary.py"脚本?它在这里工作正常.它看起来与你的摘录有点不同:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13664 次 |
最近记录: |