我尝试在表中插入整数值,但我遇到了“值错误”
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)
来自 Psycopg 常见问题解答:
问:我无法将整数或浮点参数传递给我的查询:它说 数字是必填项,但它是数字!
A:在查询字符串中,即使传递数字,也始终必须使用 %s 占位符。所有 Python 对象均由 Psycopg 转换为 它们的 SQL 表示形式,因此它们作为字符串传递给查询。 请参阅将参数传递给 SQL 查询。
所以我想你只需要将
%d
替换为 %s
。
从 pycopg 文档中我们可以找到这一行
变量占位符必须始终为 %s,即使不同的占位符(例如整数的 %d 或浮点数的 %f)可能看起来更适合该类型。您可能会发现 Psycopg 查询中使用了其他占位符(%b 和 %t),但它们与参数类型无关:
来源参见文档