值错误:索引%Id处的格式字符'd'(0x64)不受支持

时间:2017-12-07 12:29:52

标签: python-3.x postgresql psycopg2

我试图在我的表中插入整数值,但我遇到了“值错误”

import psycopg2

def connect():
    con=psycopg2.connect("dbname='book_store' user='postgres' password='5283' host='localhost' port='5432' ")
    cur=con.cursor()
    cur.execute("CREATE TABLE if not exists books(id SERIAL PRIMARY KEY,title TEXT NOT NULL,author TEXT NOT NULL,year integer NOT NULL,isbn integer NOT NULL)")
    con.commit()
    con.close()

def insert(title,author,year,isbn):
    con=psycopg2.connect("dbname='book_store' user='postgres' password='5283' host='localhost' port='5432'")
    cur=con.cursor()
    cur.execute("INSERT INTO books(title,author,year,isbn) VALUES(%s,%s,%d,%d)",(title,author,year,isbn))
    con.commit()
    con.close()


connect()
insert("the sun","helen",1997,23456777)

enter image description here

1 个答案:

答案 0 :(得分:1)

来自Psycopg FAQ

  

问:我无法将一个整数或一个浮点参数传递给我的查询:它说a   号码是必需的,但它是一个数字!

     

答:在查询字符串中,即使传递数字,也总是必须使用%s占位符。所有Python对象都由Psycopg转换   他们的SQL表示,因此它们作为字符串传递给查询。   请参阅将参数传递给SQL查询。

所以我想你只需要用%d替换%s