【问题标题】:Why can't insert data in the review table?为什么不能在review表中插入数据?
【发布时间】:2020-08-02 08:40:33
【问题描述】:

错误提到违反了外键约束。

我的错误: sqlalchemy.exc.IntegrityError:(psycopg2.errors.ForeignKeyViolation)在表“reviews”上插入或更新违反了外键约束“reviews_book_id_fkey” 详细信息:表“评论”中不存在键 (book_id)=(770)。

我的查询:

db.execute("INSERT INTO reviews (comment, score, user_id, book_id) VALUES (:comment, :score, :user_id, :book_id)", {"comment":comment, "score": score, "user_id": user.id, "book_id": book_id})
    db.commit()

我的桌子:

更新:“书”表中的书确实存在!

如果问题可能出在填充过程中, 这是一段关于我如何填充“书籍”表的代码:

f = open("books.csv") 
reader = csv.reader(f) 
for isbn, title, author, year in reader: 
   if year != 'year': 
      db.execute("INSERT INTO books (isbn, title, author, year) VALUES (:isbn, :title, :author, :year)", {"isbn": isbn, "title": title, "author": author, "year": year}) 
db.commit()

更新 #2:这是我的表“books”的快照,ID 是可见的:

【问题讨论】:

  • 看起来插入的图书ID无效..您能确认图书ID确实存在
  • 图书表中的键是否可见? (book_id)=(770)
  • 我已经尝试了几本不同的书,没关系它会显示完全相同的信息,它们都存在于 books 表中。这就是我在我的数据库中插入书籍的方式:f = open("books.csv") reader = csv.reader(f) for isbn, title, author, year in reader: if year != 'year': db.执行(“插入书籍(isbn,标题,作者,年份)值(:isbn,:title,:author,:year)”,{“isbn”:isbn,“title”:title,“author”:作者, “年”:年}) db.commit()
  • @davidev 可见是什么意思?我用一段代码更新了这个问题,如果你还没有看到它,我是如何填充书籍表的,谢谢你花时间和我一起编码!!

标签: sql postgresql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

我终于做了一些研究并解决了它! 原来我使用的是 postgreSQL,而且我是新手,所以我查看了 postgreSQL 语法,我决定放弃我的审查表并重新创建它。 第一段代码是我如何创建我的旧表(那个不起作用的)

CREATE TABLE reviews(
 id SERIAL PRIMARY KEY,
 score INTEGER NOT NUL,
 comment VARCHAR NOT NULL,
 user_id INTEGER REFERENCES users, #HERE WAS THE MISTAKE 
 book_id INTEGER REFERENCES books) #AND HERE AGAIN THE MISTAKE

如您所见,我忘记将 id 列添加到表中:

CREATE TABLE reviews(
 id SERIAL PRIMARY KEY,
 score INTEGER NOT NUL,
 comment VARCHAR NOT NULL,
 user_id INTEGER REFERENCES users(id),  # AND HERE I FIXED IT
 nook_id INTEGER REFERENCES books(id))  # AND HERE TOO

简单的错误,但我花了一段时间才弄清楚。就像我说的总是阅读文档并检查语法是否正确,我在这里的错误是假设对表的引用就足够了,并且将 id 作为默认外键。永远不要假设,吸取教训。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多