Python 3.x Insert语句返回绑定参数所需的值<;x>;

Python 3.x Insert语句返回绑定参数所需的值<;x>;,python-3.x,postgresql,csv,flask,sqlalchemy,Python 3.x,Postgresql,Csv,Flask,Sqlalchemy,我试图将CSV文件中的一行插入Heroku网站上的Postgres数据库,代码访问数据库,打开CSV文件并访问tha数据,但同时返回InvalidRequestError 代码正确地从CSV文件中获取数据,我不知道我做错了什么 数据格式为CSV文件: 1416949658,《黑暗正在升起》,苏珊·库珀,1973年 表结构: CREATE TABLE books( id SERIAL PRIMARY KEY, isbn VARCHAR NOT NULL,

我试图将CSV文件中的一行插入Heroku网站上的Postgres数据库,代码访问数据库,打开CSV文件并访问tha数据,但同时返回InvalidRequestError

代码正确地从CSV文件中获取数据,我不知道我做错了什么

数据格式为CSV文件: 1416949658,《黑暗正在升起》,苏珊·库珀,1973年

表结构:

CREATE TABLE books(
        id SERIAL PRIMARY KEY,
        isbn VARCHAR NOT NULL,                  
                title VARCHAR NOT NULL,
        author_name VARCHAR NOT NULL,
        publish_year INTEGER NOT NULL

);
sqlalchemy.exc.StatementError:(sqlalchemy.exc.InvalidRequestError)A 绑定参数“isbn”需要值[SQL:插入到书本中 (isbn,标题,作者姓名,出版年份)值(%(isbn)s,%(标题)s, %(作者姓名)s,%(发表) _年)s);][参数:[{'1416949658':'1416949658','Dark Is Rising':'Dark Is Rising','Susan Cooper':'Susan Cooper',' 1973':'1973'}]]

正如您所见,它获取数据,但仍然返回错误。

  • 要从csv导入数据,请运行以下代码段
导入csv
导入操作系统
从sqlalchemy导入创建引擎
从sqlalchemy.orm导入作用域的_会话,sessionmaker
引擎=创建引擎(os.getenv(“数据库URL”))
db=作用域_会话(sessionmaker(bind=engine))
def main():
f=打开(“books.csv”)
读卡器=csv。读卡器(f)
对于isbn,标题,作者,读者年份:
db.execute(“插入图书(isbn,标题,作者,年份)值(:isbn,:title,:author,:year)”,
{“isbn”:isbn,“title”:title,“author”:author,“year”:year})
印刷品(
f“增加了书名为:{Title}的ISBN{ISBN}的书,书名为:{Title},由{author}在{year}年编写。”)
db.commit()
如果名称=“\uuuuu main\uuuuuuuu”:
main()

这应该能解决你的问题。您缺少python中字典需要提供的
{“key”:value}
格式。

我认为您需要引用字典键:
{'isbn':isbn,'title':title,'author\u name':author\u name,
for isbn, title, author_name, publish_year in reader:
    db.execute("INSERT INTO books (isbn, title, author_name, publish_year) VALUES (:isbn, :title, :author_name, :publish_year)",\
                {isbn: isbn, title: title, author_name: author_name, publish_year: publish_year})
    print(f"Added book {title} written by {author_name} with isbn {isbn} on year {publish_year}")
db.commit()