通过python插入postgresql语法错误

6vl6ewon  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(404)

这个问题在这里已经有答案了

(psycopg2.dataerror)整数的输入语法无效:从csv文件导入(2个答案)
11个月前关门了。
我正试着运行一个程序从csv中插入数据。文件到postgresql数据库中。

db.execute("INSERT INTO books (isbn, title, author, year) VALUES (:isbn, :title, :author, :year)",
            {"isbn": isbn, "title": title, "author": author, "year": year})

代码崩溃并返回以下内容:

sqlalchemy.exc.DataError: (psycopg2.errors.InvalidTextRepresentation)
   invalid input syntax for type integer: "isbn" LINE 1: ...RT INTO
   books (isbn, title, author, year) VALUES ('isbn', 't...
                                                                ^

   [SQL: INSERT INTO books (isbn, title, author, year) VALUES (%(isbn)s,
   %(title)s, %(author)s, %(year)s)] [parameters: {'isbn': 'isbn',
   'title': 'title', 'author': 'author', 'year': 'year'}] (Background on
   this error at: http://sqlalche.me/e/9h9h)

我从import.py源代码中获取语法并修改了值。
my books表的格式为:
id序列主键
isbn整数主键
title varchar不为空
author varchar不为空
年份整数不为空
谁能告诉我我的语法有什么问题吗?

jm2pwxwz

jm2pwxwz1#

正如@humayunm所说,这可能是因为您试图插入一个字符串,这给您留下了两个立即选项。
更改数据库架构(可能首选)
将isbn类型更改为 varchar(255) 偏好推理:isbn实际上是整数吗?i、 你会对它进行整数运算作为加法吗?或者是一个当前恰好被格式化为数字的id?isbn也是一种您无法控制的id格式。您真的希望应用程序与当前格式紧密耦合吗?如果将来isbn改为包含字母,会发生什么?
或者,转换字符串
或者你可以直接转换 isbn :

isbnAsNumber = int(isbn.strip().replace("-", ""))
db.execute("INSERT INTO books (isbn, title, author, year) VALUES (:isbn, :title, :author, :year)",
            {"isbn": isbnAsNumber, "title": title, "author": author, "year": year})

但与第一个解决方案中建议的更改逻辑类型相比,我认为这是一个肮脏的解决方案。

相关问题